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 :

Plusieurs boutons pour une fonction


Sujet :

jQuery

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 117
    Points : 68
    Points
    68
    Par défaut Plusieurs boutons pour une fonction
    Bonjour,

    J'ai une page HTML sur laquelle se trouve une multitude de boutons qui pilotent des relais.

    J'ai la fonction qui évite le rafraichissement de la page :
    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
    <script type="text/javascript" src="JS/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
     
        $(document).ready(function() {
     
                $("#ibuttonON").click(function(e) {
                    e.preventDefault();
                    var value ='etatDevice='+$("[name='etatDevice']").val()
                        +'&deviceID='+$("[name='deviceID']").val();
     
                    $.ajax({
                        url: "AccueilServlet",
                        //type: "post",
                        data: value,
                        cache: false,
                        success: function() {
                            $("#message").text(value);
                        }
                    });
     
                });
     
        });
    Et des boutons dans un formulaire (2 pour l'exemple)

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form id="formInter">
        <input type="hidden" value="1" name="etatDevice">
        <input type="hidden" value="18" name="deviceID">
        <button id="ibuttonON">ON</button>
        <input type="hidden" value="0" name="etatDevice">
        <input type="hidden" value="18" name="deviceID">
        <button id="ibuttonOFF">OFF</button>
    </form>

    Dans ce code, uniquement le bouton ON fonctionne puisque son id est définit dans la fonction .click

    Ma question est la suivant, comment faire pour utiliser la même fonction .click avec tt les boutons de mon formulaire ??

    Merci d'avance...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    J'ai trouvé une solution, si ça peu aider d'autres personnes.

    Première chose, définir un formulaire par bouton et ajouter class="maClass" dans chaque balise button.

    La fonction .click() modifiée :
    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
     
    <script type="text/javascript" src="JS/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
     
        $(document).ready(function() {
            $(".button").click(function(e) {
                e.preventDefault(); // Empêche le navigateur de suivre le lien.
     
                    var bouton = this; 
                    var value = "etatDevice="+ $(bouton).siblings('[name="etatDevice"]').attr('value')
                            +"&deviceID="+ $(bouton).siblings('[name="deviceID"]').attr('value');
     
                    $.ajax({
                        url: "AccueilServlet",
                        //type: "post",
                        data: value,
                        cache: false,
                        success: function() {
                            $("#message").text(value);
                        }
                    });
             });
        });
    Si après avoir parcouru ces lignes vous connaissez une façon plus propre, plus optimisée, je suis preneur !!!

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form id="formInter">
        <input type="hidden" value="1" name="etatDeviceON1">
        <input type="hidden" value="18" name="deviceIDON1">
        <button id="ibuttonON1">ON 1</button>
        <input type="hidden" value="0" name="etatDeviceOFF1">
        <input type="hidden" value="18" name="deviceIDOFF1">
        <button id="ibuttonOFF1">OFF 1</button>
        <input type="hidden" value="2" name="etatDeviceON2">
        <input type="hidden" value="36" name="deviceIDON2">
        <button id="ibuttonON2">ON 2</button>
        <input type="hidden" value="0" name="etatDeviceOFF2">
        <input type="hidden" value="36" name="deviceIDOFF2">
        <button id="ibuttonOFF2">OFF 2</button>
    </form>

    Code javascript : 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
    /*
     * Click sur n'importe quel bouton ayant un ID qui
     * commence par 'ibutton'.
     */
    $( "button[id^='ibutton']" ).on( "click", function( e ){
        e.preventDefault();
     
        /*
         * Méthode serialize : collecte les valeurs des éléments du formulaire
         * ayant un name (http://api.jquery.com/serialize/).
         * 
         * $.post : méthode AJAX (http://api.jquery.com/jQuery.post/).
         * 
         * jqXHR : objet différé contenant la promesse
         * (http://api.jquery.com/category/deferred-object/).
         */
        var infos = $( "#formInter" ).serialize(),
        	jqXHR = $.post( "AccueilServlet", infos );
     
        // debug : etatDeviceON1=1&deviceIDON1=18&etatDeviceOFF1=0&deviceIDOFF1=18&etatDeviceON2=2&deviceIDON2=36&etatDeviceOFF2=0&deviceIDOFF2=36
        console.log( infos );
     
    	jqXHR.done( function( data, textStatus, jqXHR ){
    		// succès de la transaction, on doit traiter le contenu de data
    		console.log( data, textStatus, jqXHR );
     
    	});
     
    	jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
    		// échec de la transaction, gérer la catastrophe
    		console.log( jqXHR, textStatus, errorThrown );
     
    	});
     
    	jqXHR.always( function( jqXHR, textStatus ){
    		// la transaction est terminée
    		console.log( jqXHR, textStatus );
    	});
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    Merci pour ce code !!
    Mais je n'arrive pas à le faire fonctionner. Il envoi la totalité du formulaire à mon servlet.
    Même problème que ds mon premier post.

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Oops ! Pour le même code HTMl :

    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
    /*
     * Click sur n'importe quel bouton ayant un ID qui
     * commence par 'ibutton'.
     */
    $( "button[id^='ibutton']" ).on( "click", function( e ){
        e.preventDefault();
     
        /*
         * Méthode serialize : collecte les valeurs des éléments du
         * formulaire ayant un name dont les trois derniers caractères 
         * sont identiques aux trois derniers caractères de l'ID 
         * du bouton cliqué (http://api.jquery.com/serialize/).
         * 
         * $.post : méthode AJAX (http://api.jquery.com/jQuery.post/).
         * 
         * jqXHR : objet différé contenant la promesse
         * (http://api.jquery.com/category/deferred-object/).
         * 
         * [name$=''] : http://api.jquery.com/category/selectors/attribute-selectors/
         */
        var btnID = this.id,
        	infos = "btnID=" + btnID + "&" + $( "[name$='" + btnID.slice( -3 ) + "']", "#formInter" ).serialize(),
        	jqXHR = $.post( "AccueilServlet", infos );
     
        // debug :
        console.log( infos );
     
    	jqXHR.done( function( data, textStatus, jqXHR ){
    		// succès de la transaction, on doit traiter le contenu de data
    		console.log( data, textStatus, jqXHR );
     
    	});
     
    	jqXHR.fail( function( jqXHR, textStatus, errorThrown ){
    		// échec de la transaction, gérer la catastrophe
    		console.log( jqXHR, textStatus, errorThrown );
     
    	});
     
    	jqXHR.always( function( jqXHR, textStatus ){
    		// la transaction est terminée
    		console.log( jqXHR, textStatus );
    	});
     
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 117
    Points : 68
    Points
    68
    Par défaut
    Merci de prendre un peu de ton temps pour moi, mais ça ne fonctionne toujours pas.

    La fonction serialize() récupère les noms des input qui sont tous différents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    btnID=ibuttonON1&etatDeviceON1=1&deviceIDON1=18
    Attendu par le servlet : btnID=ibuttonON1&etatDevice=1&deviceID=18
    Du coup, mon servlet ne récupère pas les bonnes variables ce qui implique du coté du servlet un traitement des variables envoyées.

    Qu'apporte de plus ton code en rapport du mien ????

Discussions similaires

  1. [XL-2007] Plusieurs outputs pour une fonction
    Par Wini29 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2013, 11h43
  2. plusieurs boutons pour une même action
    Par SweetBlueMelody dans le forum jQuery
    Réponses: 4
    Dernier message: 16/02/2012, 15h53
  3. Plusieurs return pour une fonction
    Par troumad dans le forum Débuter
    Réponses: 33
    Dernier message: 29/11/2011, 17h34
  4. Plusieurs trigger pour une même fonction
    Par floriaan60 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 25/06/2010, 22h16
  5. [C#] Plusieurs LinkButton pour une seule fonction
    Par FunnyDjo dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/06/2005, 22h01

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