jQuery фиксирует все изменения именованного ввода в форме - PullRequest
2 голосов
/ 11 июня 2010

Я пытаюсь определить, когда какой-либо из набора именованных полей ввода / выбора / радио / отмеченных / скрытых в форме изменяется.

В частности, я хотел бы получить информацию, когда какие-либо изменения вносятся в поля, соответствующие селектору jQuery $("form :input"), и где этот вход имеет атрибут name. Однако форма не является статичной, то есть некоторые поля добавляются динамически позже.

Моя первоначальная мысль - отслеживать, когда добавляются новые именованные элементы, соответствующие :input, а затем добавлять обработчик событий, например:

function on_change() {
   alert("The form element with name " + $(this).attr("name") + " has changed");
}

function reg_new_e_handler(input_element) {
    input_element.change(on_change);
}

Однако я очень надеюсь, что смогу избежать этого с помощью некоторой магии jQuery. В частности, есть ли способ зарегистрировать обработчик событий в jQuery, который будет обрабатывать элементы ввода, соответствующие следующему:

$("form :input").filter( function () { $(this).attr("name") } ).change(on_change);

Однако обновляйте этот набор событий при добавлении новых элементов ввода.

Я думал, что возможно зафиксировать событие keyup на узле form с помощью $("form").keyup(on_change), но я не уверен, как можно захватить change события.

Я также хотел бы, чтобы это захватывало keyup событий.

Спасибо за чтение.

Brian

1 Ответ

6 голосов
/ 11 июня 2010

Вы ищете live события .
Например:

$(':input[name="something"]'.live('change', function(e) {
    //Do things
});

Добавление обработчика события с помощью .live будет обрабатывать событие для всех элементов, которыесопоставлять селектор, независимо от того, когда он был добавлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...