IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Débutant] Popup avec javascript dans un fichier séparé


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut [Débutant] Popup avec javascript dans un fichier séparé
    Bonjour à tous,

    Je veux séparer le javascript du code xHTML. Par conséquent, j'ai créé un fichier .xhtml et un autre .js. Cependant, je n'arrive pas à ouvrir de popup.

    Code xHTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
            <title>Test</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<script type="text/javascript" src="script.js"></script>
        </head>
     
       <body>
    		<a href="#" id="popup"><img src="test.jpg" alt="test"></a>
       </body>
    </html>

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('popup').onClick="window.open('image.jpg','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0');return(false)"

    Comment faire ?

    Merci d'avance,

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Dans ton code javascript, tu fais xxx.onClick = STRING alors qu'il faudrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    document.getElementById('popup').onClick=function(){
        window.open(
            'image.jpg',
            '_blank',
            'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0'
          );
        return(false);
      };
    Le code javascript se trouvant à l'intérieur de tes guillemets en html doit être enlevé de ceux-ci et placé dans une fonction. Regarde la différence entre ton code et le mien : le function() {...} n'est pas en rouge, car c'est du code Javascript. Tandis que chez toi, c'est en rouge parce que c'est considéré comme une chaîne de caractère.

  3. #3
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Merci pour cette remarque très pertinente. Je suis vraiment un débutant (depuis ce matin ...) et je n'avais même pas remarqué.

    Voici donc mon code actuel :
    Code xHTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
            <title>Test</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<script type="text/javascript" src="script.js"></script>
        </head>
     
       <body>
    		<a href="#" id="popup"><img src="test.jpg" alt="test"></a>
       </body>
    </html>

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    document.getElementById('popup').onClick=function(){
        window.open(
            'image.jpg',
            '_blank',
            'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0'
          );
        return(false);
      };

    Malheureusement, quand je clique sur le lien, rien ne s'ouvre. Comme j'utilise Firefox, le debugger me dit : document.getElementById("popup") has no properties. Je ne comprends pas trop ce que ça veut dire ni comment résoudre ce problème.

    Quelqu'un peut-il éclairer ma lanterne sur cette erreur et sur la manière de la résoudre ?
    Merci d'avance.

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Bon, ça, c'est plus complexe, effectivement... mais facilement soluble.

    ton code javascript est exécuté pile au moment où il est chargé, et le document n'a peut-être pas encore chargé toute la page HTML.

    Dans ce cas, il te suffit d'insérer ce code dans window.onload afin de demander que le code soit exécuté une fois que la page HTML sera entièrement chargée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    window.onload=function() {
      document.getElementById('popup').onClick=function(){
          window.open(
              'image.jpg',
              '_blank',
              'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0'
            );
          return(false);
        };
    };

  5. #5
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Super ... merci dingoth pour la correction de cette erreur. Malheureusement, il ne se passe toujours rien. Je n'ai plus d'erreur mais rien ne s'ouvre, aucune popup. Pourtant, j'ai bien le curseur de type "main" sur mon image.

    Qu'ai-je encore oublié ?

    Merci encore ... et d'avance pour ton aide,

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  6. #6
    Membre habitué Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Points : 187
    Points
    187
    Par défaut
    Bon alors j'ai tout refait et tout changé ...

    Voici mon code désormais :
    Code xHTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
            <title>Test</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    		<script type="text/javascript" src="script.js"></script>
        </head>
     
       <body>
    		<a href="#" onclick="PopupImage('image.jpg');"><img src="test.jpg" alt="test"></a>
       </body>
    </html>
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function PopupImage(image)
    {
    	window.open
    	(
    		image,
    		'_blank',
    		'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0'
    	);
    }

    J'ai fait une fonction comme ça ce sera réutilisable par plusieurs fichiers vu que j'aurais les mêmes options. Est-ce que c'est bien ? Est-ce que c'est la meilleure façon de faire les choses ?

    D'autre part, j'aimerais modifier 2 choses :
    - que la popup fasse exactement la taille de l'image affichée (sans passer ses dimensions en paramètres),
    - qu'un clic sur l'image de cette popup ferme cette popup.

    Est-ce possible en JavaScript ?

    Merci d'avance de m'éclairer sur tous ces sujets.

    Marco85
    If you cannot explain a concept to a six year-old, then you do not fully understand it. [Albert Einstein]

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Bon, alors, là, tu commences déjà à re-mélanger Javascript et HTML, ce que tu voulais éviter, il me semble

    Alors, on va faire un méga-truc hyper-documenté. Mais va falloir donner un peu du tiens. À la fin, tu n'auras pas un seul morceau de code javascript dans ta page HTML.

    Page HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
      <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="script.js"></script>
      </head>
      <body>
        <img class="image-popup" src="test_mini.png" alt="test" />
      </body>
    </html>
    Fichier JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    // On change le comportement par défaut de JavaScript lors du chargement d'une page.
    window.onload=auChargement;
     
    // Voici la fonction qui sera appelée lors du chargement d'une page.
    function auChargement() {
     
    	// Si on utilise un navigateur récent
    	if (document.getElementById && document.getElementsByTagName) {
     
    		// On récupère l'ensemble des images.
    		// Une alternative aurait été document.images, mais c'est plus propre ainsi.
    	  var arrAllImages = document.getElementsByTagName("img");
    	  var oImage;
     
    	  // Pour chaque image,
    	  for (var i = 0; i < arrAllImages.length; i++) {
    	  	oImage = arrAllImages[i];
     
    	  	// si elle a image-popup comme classe
    	  	if (oImage.className.search(/image-popup/) != -1) {
     
    				// On écoute les clics
    	  		oImage.onclick = function(oEvent) {
     
    	  			// Les quatre lignes suivantes empêchent la réutilisation du comportement par défaut,
    	  			// histoire de pas modifier la navigation, le cas échéant.
    	  			var oEvent = (typeof oEvent != "undefined")? oEvent : event;
    	  			oEvent.returnValue = false;
    					if(oEvent.preventDefault)
    						oEvent.preventDefault();
     
    					// On enlève le _mini de l'url de l'image.
    					var imgPopupSrc = oImage.src.replace(/_mini/,"");
     
    					// On fait enfin le popup.
    					// Il faut modifier les paramètres.
    					var win = window.open(imgPopupSrc, '_blank', 'parametres');
     
    					// On ajoute la fonctionnalité de fermeture automatique de la fenêtre.
    					win.onClick = function(oEvent2) {
    					  win.close();
    					}
    	  		}
    	  	}
    	  }
    	}
    }
    Alors, qu'est-ce que cela apporte ?

    Eh bien, maintenant, il te suffit d'avoir deux images :
    - test.jpg
    - test_mini.jpg

    Celle qui sera chargée dans ta page sera test_mini.jpg L'autre sera l'image grandeur nature.

    Pour ajouter autant d'image que tu le souhaites avec ce comportement, il suffit très simplement d'ajouter dans la balise <img /> la classe "image-popup". C'est plus simple d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img class="image-popup" src="test_mini.png" alt="test" />
    que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="popup('test.png');return false;"><img src="test_mini.png" alt="test" /></a>
    ? non ?

    Par contre, je ne sais plus comment récupérer la taille d'une image à partir de javascript (mais c'est possible). Une fois que tu l'as, il te suffit de 1) soit la passer en paramètre à la méthode window.open() dans le script.js 2) effectuer un win.resize(longueur, largeur) après l'appel à la window.open().

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/09/2006, 16h07
  2. Réponses: 8
    Dernier message: 29/01/2006, 16h48
  3. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  4. Probleme avec print dans un fichier
    Par goblin dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 18h15
  5. [débutant] nombre de colonne dan sun fichier csv
    Par mandagor dans le forum C++
    Réponses: 18
    Dernier message: 15/06/2005, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo