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

jQuery Discussion :

Mettre une bordure sur une image lors d'un click


Sujet :

jQuery

  1. #1
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Points : 1 667
    Points
    1 667
    Par défaut Mettre une bordure sur une image lors d'un click
    Bonjour, j'ai dans ma page html,j'ai un formulaire qui comporte 2 images et un bouton submit qui est également une image.

    Lorsque je clique sur l'une des deux images, je souhaiterais que celle-ci soit entouré d'une bordure et si jamais je clique par la suite sur la deuxième, c'est la deuxième qui a une bordure et plus la première.

    Une fois que je valide mon formulaire, je souhaite savoir qu'elle image a été cliquée (obligatoirement une et une seule).

    Ma première question est, comment mettre une bordure sur mon image lorsque je clique dessus? avec du javascript?

    Une fois que j'ai cliqué sur mon image et valider mon formulaire, comment puis-je savoir sur quelle image j'ai cliqué?

    Ca ressemble à des boutons radio mais ce sont des images.. :/

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 070
    Points : 44 633
    Points
    44 633
    Par défaut
    Bonjour,
    en HTML pur cela va être très dur de gérer tout cela, il te faut avoir recours au javascript.

    Dans le principe sur le click de tes images
    - tu modifies le style des images
    - tu initialises un champ hidden qui possédant un NAME sera transmis

  3. #3
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Points : 1 667
    Points
    1 667
    Par défaut
    J'ai réussi à faire ce que je voulais.

    Je mets le code pour ceux qui voudrait faire la même chose que moi.

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <form method="POST" action="traitement.php">
     
    <input type="hidden" name="vote" id="vote" value="0">
     
    <a href="#" onClick="changeMaillot('1');"><img id="maillot_fr" src="images/maillot_fr.png" width="200px" /></a>
     
    <a href="#" onClick="changeMaillot('2');"><img id="maillot_uk" src="images/maillot_uk.png" width="200px" /></a>
     
    <input border=0 src="images/valider.png" type=image value=submit align="middle" >
     
    </form>
    traitement.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $vote = $_POST['vote'];
    javascript.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function changeMaillot(maillot)
    {
    	if(maillot == 1){
    		$('#maillot_fr').css('border','1px solid black');
    		$('#maillot_uk').css('border','1px solid white');
    		document.getElementById('vote').value = 1;
    	}else if(maillot == 2){
    		$('#maillot_uk').css('border','1px solid black');
    		$('#maillot_fr').css('border','1px solid white');
    		document.getElementById('vote').value = 2;
    	}
    }
    style.css
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #maillot_fr, #maillot_uk
    {
    	border:1px solid white;
    	border-radius:10px;
    	-moz-border-radius:10px;
    	-webkit-border-radius:10px;
    }

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 070
    Points : 44 633
    Points
    44 633
    Par défaut
    finalement c'est pour jQuery que tu as opté, pourquoi pas!

    Dans ce cas que fait un document.getElementById('vote').value = 1; dans ton code, tant qu'a utiliser jQuery autant le faire entièrement .

    Tu pourrais par la même dissocier le HTML du JS en utilisant l'initialisation au chargement de la page, le fameux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(function(){
      // le code à exécuté ici
    };
    Ton code présente un soucis, le onclick sur la balise A n'empêche pas l'exécution de l'action par défaut des liens, pas trop grave dans ton cas d'ailleurs, il te faudrait retourner false dans la fonction exécutée sur le onclick.

    Une dernière chose, concenant le style="200px" dans tes images, autant prendre l'habitude de le mettre dans la partie STYLE.

    Ci dessous ce que cela aurait pu donner
    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
    48
    49
    50
    51
    52
    53
    <!DOCTYPE html>
    <html>
    <head>
    <style>
    a img{
      width : 200px;
      border:1px solid white;
      -moz-border-radius:10px;
      -webkit-border-radius:10px;
      border-radius:10px;
    }
    </style>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
    $(function(){
      // récup des images concernées
      var oImage = $('a > img');
      // pour chaque éléments de la liste
      $.each( oImage, function( /*ind, value*/){
        // affectation de la fonction sur le onclick du parent
        $(this).parent().on( 'click', function(){
          // probléme de scope sur le this dans le each
          var oParent = this;
          // on traite toutes les images de la liste
          $.each( oImage, function( ind, value){
            // le parent est le lien cliqué ?
            if( this.parentNode === oParent){
              // bordure en noir
              $(this).css('border','1px solid black');
              // mise à jour champ caché
              $('#vote').val( ind+1);
            }
            else{
              // sinon bordure en blanc
              $(this).css('border','1px solid white');
            }
          });
          // évite l'action par défaut de la balise A
          return false;
        });
      });
    });
    </script>
    </head>
    <body>
    <form method="POST" action="traitement.php">
      <input type="hidden" name="vote" id="vote" value="0">
      <a href="#"><img src="images/maillot_fr.png"></a>
      <a href="#"><img src="images/maillot_ku.png"></a>
      <input border=0 src="images/valider.png" type=image value=submit align="middle">
    </form>
    </body>
    </html>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [CSS 3] Donner priorite a une bordure sur une autre (couleur)
    Par student_php dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 11/01/2011, 21h50
  3. Réponses: 3
    Dernier message: 15/04/2009, 07h30
  4. Mettre un lien sur une partie de l'image de fond
    Par locoroco dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 27/11/2008, 14h05
  5. Réponses: 1
    Dernier message: 11/06/2007, 21h31

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