JQuery, привязать одну и ту же функцию к событию keyup 3 разных текстовых полей - PullRequest
6 голосов
/ 16 июля 2009

У меня есть 3 текстовых поля, и для события keyup для всех 3 я хочу вызвать одну и ту же функцию?

В приведенном ниже коде я привязываю событие keyup к функции CalculateTotalOnKeyUpEvent к текстовому полю с именем compensation, но оно не работает:

$("#compensation").bind("keyup", CalculateTotalOnKeyUpEvent(keyupEvent));

function CalculateTotalOnKeyUpEvent(keyupEvent) {
  var keyCode = keyupEvent.keyCode;
  if (KeyStrokeAllowdToCalculateRefund(keyCode)) {
    CalculateTotalRefund();
  }
};

Ответы [ 5 ]

12 голосов
/ 16 июля 2009

Вам нужно сделать так:

// Edit according to request in the comment: 
// in order to select more than one element,
// you need to specify comma separated ids.
// Also, maybe you need to consider to use a CSS class for the selected elements,
// then it could be just $(".className")
$("#element1, #element2, ....").bind("keyup", CalculateTotalOnKeyUpEvent);

Вам нужно передать функцию в качестве параметра, вам не нужно передавать функцию, как она была объявлена.

5 голосов
/ 16 июля 2009
$("#txt1, #txt2, #txt3").keyup(fn);
2 голосов
/ 02 апреля 2010

или просто присвойте всем 3 текстовым полям один и тот же класс, и вы можете идти

0 голосов
/ 16 июля 2009
$("#compensation").bind("keyup",CalculateTotalOnKeyUpEvent(keyupEvent));

Когда вы пишете CalculateTotalOnKeyUpEvent (keyUpEvent) [обратите внимание на () после имени функции], вы выполняете CalculateTotalOnKeyUpEvent и назначаете результат функции событию key up.

Вы должны сделать что-то вроде,

$('#compensation, #otherId1, #otherId2')
    .bind('keyup', CalculateTotalOnKeyUpEvent);

Где «otherId1» и «otherId2» - это идентификаторы еще двух текстовых полей.

0 голосов
/ 16 июля 2009

Вы звоните CalculateTotalOnKeyUpEvent немедленно, не передавая его в качестве аргумента. Попробуйте это:

$("#compensation").bind("keyup",CalculateTotalOnKeyUpEvent);
...