2009-12-01 7 views
0

je le code suivant:Jquery Bind Event

$('#form_field, #button').bind('change click', function() { 
// take action 
}); 

Il fonctionne très bien. Cependant, je veux déclencher la même action quand 'change' est utilisé pour '#form_field' et 'click' pour '#button' (pas quand 'click' est utilisé pour '#form_field').

Je sais qui peut être fait en utilisant le code suivant:

$('#form_field').bind('change', function() { 
// take action 
}); 

$('#button').bind('click', function() { 
// take action 
}); 

Cependant, je ne veux pas répéter tout le code qui se trouve dans la fonction (// action de prendre). Cela semblerait inefficace et je devrai l'éditer deux fois chaque fois que j'y apporterai des modifications.

Des idées?

Merci à l'avance

Répondre

12

Que diriez-vous:

var myCoolFunction = function() { 
    // take action 
}; 
$('#form_field').bind('change', myCoolFunction); 
$('#button').bind('click', myCoolFunction); 

??

+1

Pourquoi ne pas u (et Nick Spiers dans sa réponse) ne pas utiliser '$ ('bouton #') cliquez sur (myCoolFunction)' au lieu de ' $ ('# button'). bind ('click', myCoolFunction) '? Idem avec '$ ('# button'). Bind ('change', myCoolFunction)' et '$ ('# button'). Change (myCoolFunction)'. Comme je suis nouveau à JQuery: Y a-t-il une raison spécifique? ~ Chris – cimnine

+0

Pas vraiment, il sauve un énorme appel de fonction 1 .. à l'intérieur de jQuery '$ .fn.click = function (fn) {return fn? this.bind ('click', fn): this.trigger ('clic'); }; '(bien qu'il ne soit pas directement défini de cette façon, regardez @ ligne 3098 dans jQuery-1.3.2.js) – gnarf

0

Je ne suis pas sûr que ce soit une bonne idée de trouver un moyen de contourner ce problème. Si les deux font la même chose, il leur suffit de faire une fonction pour appeler les événements requis.

3

Cela devrait faire l'affaire.

$('#form_field').bind('change', takeAction); 

$('#button').bind('click', takeAction); 

function takeAction() { 
    //take action 
};