2009-02-04 1 views
16

У меня есть элемент ввода, и я хочу связать как изменение, так и событие нажатия клавиши с вводом, но код обработки событий одинаковый для обоих событий. есть ли короткий способ сделать это, вместо того, чтобы писать один и тот же код дважды. хорошо, я мог бы написать метод, но хотел бы видеть, если есть более простой способ сделать этоесть код обработки одного события для нескольких событий в jQuery

$("#inpt").change(function(){ 
    some code 
}); 

$("#inpt").keypress(function(){ 
    same code 
}); 

есть ли способ я могу связать оба события?

ответ

39

Вы можете использовать JQuery по методу.

$("#inpt").on("change keypress", function() { 
    code 
}); 
+1

спасибо, вот что я искал. –

+0

В соответствии с jquery [docs] (http://api.jquery.com/bind/), «Как и в jQuery 1.7, метод .on() является предпочтительным методом привязки обработчиков событий к документу». Поэтому для более поздних версий, чем 1.7, я использовал бы '$ (" # inpt "). On (" change keypress ", function() { код });' – jbustamovej

+0

@jbustamovej Я обновил его. – tvanfosson

6

Вы можете сохранить функцию и привязать его к обоим:

var fn = function(){ /*some code*/ }; 
$("#inpt").change(fn).keypress(fn); 
1

Вы можете также использовать «живой» событие вместо «привязки» мотивационные один. Событие «live» будет охватывать даже динамические созданные элементы. (Устаревшее на 1,7)

Kaless1n и Мэтью, чтобы связываться с несколькими элементами использовать «Атрибут начинается с Selector»:

var fn = function() { /*some code*/ }; 

$('input[id^="foo_"]').click(fn).keyup(fn).keydown(fn); 

Это будет связываться со всеми элементами «INPUT», где начинается «ID» с 'foo_'. Вы можете изменить «ввод» на любой элемент onther и/или «id» с атрибутом «name», например.

Смежные вопросы