2011-05-11 4 views
6

Dans mon formulaire, j'ai deux boutons de soumission.Déterminez quel bouton a déclenché la soumission

<input type="submit" name="save" value="Save as draft"/> 
<input type="submit" name="send" value="Start sending" /> 

Maintenant, avant de soumettre le formulaire au serveur, je veux effectuer des tâches spécifiques en fonction du bouton a été cliqué.

$('form').submit(function(){ 
    if submit equals save 
     task 1; 
    elseif submit equals send 
     task 2    
} 

Comment vérifier quel bouton a été enfoncé?

+3

Je suis sûr que vous pouvez améliorer le titre de cette question. –

+2

ajouter des gestionnaires de clic pour les deux boutons – user489872

+1

oh bien, fait .. – goh

Répondre

5
$(":submit").click(function() { 
    $("form").data("submit-button", this.name); 
}); 

$("form").submit(function() { 
    var button = $(this).data("submit-button"); 
    ... 
}); 

Puis extrayez ce nom dans votre gestionnaire de soumission.

+0

Oui, vous pouvez. [fiddle] (http://jsfiddle.net/9KdQh/) – Raynos

+0

Oh, attends, je pensais que tu ne faisais que copier le nom du bouton, l'élément du bouton lui-même, pas le formulaire. Mais même alors: pourquoi ne pas mettre la logique dans le gestionnaire de clic, au lieu du gestionnaire de soumission du formulaire? –

+2

@MarcelKorpel Parce que la logique ne s'exécute pas lorsque vous soumettez le formulaire via d'autres méthodes, par exemple en appuyant sur ENTRÉE. – Raynos

-1
$('input').each(function(n) { 
    $(this).click(function() { 
    var name = $(this).attr('name'); 

    if (name === 'save') { 
     // do stuff 
    }else if (name === 'submit'){ 
     // do some other stuff 
    } 
    } 
}); 

Bien sûr, vous pouvez également utiliser une instruction switch.

Si le travail que vous voulez effectuer est complexe et de manière différente, vous devriez envisager d'utiliser 2 formes différentes

J'espère que cela répond à votre question

EDIT:

$('input:submit').click(function(n) { 
    var name = $(this).attr('name'); 
    if (name === 'save') { 
     // do stuff 
    }else if (name === 'submit'){ 
     // do some other stuff 
    } 
    } 
}); 
+4

Où vérifiez-vous que le bouton a été cliqué? –

+0

merci, j'ai sauté cette partie: 0 – Ibu

+1

Maintenant, vous ajoutez des gestionnaires d'événements à _every_ 'input', même si cela ne fera rien. Cela semble un peu inutile. –

5

Si c'était moi, je le ferais un peu différemment. Je ferais quelque chose le long des lignes de -

<button type='button' id='formSave'>Save as draft</button> 
<button type='button' id='formSend'>Start Sending</button> 

$('#formSave').click(function(){ 
    //submit form 
    //task 1 
}); 

$('#formSend').click(function(){ 
    //submit form 
    //task 2 
}); 

Im juste baser ma réponse hors de vos noms de boutons et autres joyeusetés, mais il semble que vous voulez faire quelque chose à ce simliar. Ajouter un gestionnaire de clic sur vos boutons d'envoi qui stocke le nom.

+0

Je pense que le second devrait utiliser ''# formSend'' –

+3

Cela casse le support non JavaScript. S'il vous plaît écrivez JavaScript discret. – Raynos

+1

@Raynos soulève un bon point. Souvenez-vous également que les formulaires peuvent être soumis sans appuyer sur des boutons - comme appuyer sur retour pendant qu'un élément d'entrée est mis au point; certains navigateurs vont pseudo-cliquer sur le bouton le plus proche, d'autres vont soumettre le formulaire sans pseudo-clic sur un bouton. –

-2

Je suggère d'utiliser l'approche de HurnsMobile, mais si vous avez absolument besoin d'une fonction pour gérer à la fois les boutons, vous pouvez utiliser l'objet événement jQuery pour détecter les boutons,

$('form').submit(function(event){ 
    if(event.target.name == 'save') { 
     // do save task 
    } else if (event.target.name == 'send') { 
     // do send task 
    } 
}); 
+2

Etes-vous sûr que cela fonctionne. Je crois que certains navigateurs définissent 'event.target === form' – Raynos

+0

@Raynos est correct,' event.target === form' –

Questions connexes