2010-12-01 5 views
0

Je développe un peu de jQuery, mais je suis un débutant donc c'est un peu gonflé et pas très élégant. Fondamentalement, je veux que la valeur d'un cookie soit annulée lorsque l'un des deux formulaires est soumis ou que l'on clique sur le bouton d'envoi. Mais je ne sais pas comment consolider les conditions de la fonction pour que je n'ai d'écrire la fonction une fois, donc le mieux que je puisse faire est la suivante:jQuery - Déclencheurs multiples pour la même fonction

$('form#searchform-basic').submit(function() { 
    $.cookie('tab_cookie', null); 
}); 
$('form#searchform-basic a.search').click(function() { 
    $.cookie('tab_cookie', null); 
}); 
$('form#searchform-advanced').submit(function() { 
    $.cookie('tab_cookie', null); 
}); 
$('form#searchform-advanced input#search-button-submit').click(function() { 
    $.cookie('tab_cookie', null); 
}); 

Il doit y avoir une meilleure façon, droite?

Et avant que quelqu'un ne le demande, oui, vous penseriez que vous auriez seulement besoin de savoir quand les formulaires sont soumis. Mais si vous omettez les événements de clic, cela signifie que la fonction ne s'exécute pas lorsque vous cliquez sur les boutons d'envoi. Je ne sais pas pourquoi c'est comme ça, c'est juste.

Répondre

4

Donnez votre fonction un nom, comme ceci:

function ClearCookie() { 
    $.cookie('tab_cookie', null); 
} 

De cette façon, vous pouvez l'appeler à partir de plusieurs événements au besoin.

$('form#searchform-basic').submit(ClearCookie); 
$('form#searchform-basic a.search').click(ClearCookie); 
$('form#searchform-advanced').submit(ClearCookie); 
$('form#searchform-advanced input#search-button-submit').click(ClearCookie); 

Voila!

Pour prendre un peu plus loin, vous pouvez combiner les sélecteurs qui appellent le même événement (soumettre ou cliquez sur), comme ceci:

$('form#searchform-basic, form#searchform-advanced').submit(ClearCookie); 
$('form#searchform-basic a.search, form#searchform-advanced input#search-button-submit').click(ClearCookie); 

Je laisserais probablement de la balise de forme et il suffit d'utiliser la ID, mais c'est juste moi.

$('#searchform-basic, #searchform-advanced').submit(ClearCookie); 
$('#searchform-basic a.search, #searchform-advanced input#search-button-submit').click(ClearCookie); 
+0

Merci! C'est presque parfait, sauf que j'ai trouvé par essais et erreurs que la séparation des identificateurs avec des guillemets simples ET des virgules au lieu de simples virgules n'était pas la syntaxe correcte. En outre, j'espérais qu'il y aurait un moyen de combiner les événements .click() et .submit() en un seul, comme dans "Si soumettre OU cliquez sur le bouton, puis effacer le cookie". – Tom

+0

Merci @Tom, j'ai édité pour corriger la syntaxe. Autant que je sache, vous ne pouvez pas combiner les deux événements différents en une seule déclaration. – Marcie

1
$('oneselector','second','third').click(function() { 
    $.cookie('tab_cookie', null); 
}); 

essayer que

1

Eh bien, puisque cliquant sur le bouton d'envoi présente en fait la forme, vous ne avez pas besoin de lier un gestionnaire de clic que ce soit sur le bouton soumettre, simplement lier votre contrôle à l'action présenter de la forme (ce qui arrive comme conséquence de cliquer sur un bouton de soumission).

Pour le simplifier en une ligne, ajoutez une classe à vos formulaires tels que clear-cookie.

<form id="searchform-basic" class="clear-cookie"> ... </form> 
<form id="searchform-advanced" class="clear-cookie"> ... </form> 

$("form.clear-cookie").submit(function(){ 
    $.cookie('tab_cookie', null); 
}); 

Plus au point de plusieurs sélecteurs cependant, vous pouvez, comme mentionné ci-dessus faire quelque chose comme:

$("#searchform-basic, #searchform-advanced").submit(...); 

Mais je trouve que je groupe habituellement des éléments liés à l'utilisation des classes.

+0

Comme je l'ai dit dans le post original, .submit() et .click() ne font pas la même chose sur mon site. Je ne sais pas pourquoi. Alors oui, j'ai besoin à la fois de lier un gestionnaire de clic au bouton de soumission en plus du gestionnaire de soumission pour le formulaire. – Tom

Questions connexes