2010-06-10 1 views
2

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

В частности, я хотел бы зафиксировать, когда будут внесены какие-либо изменения в поля, соответствующие селектору 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

ответ

6

Вы ищете live events.
Например:

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

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

+1

Вы можете просто сделать: input [name], чтобы получить все именованные элементы. –

+0

Да, '$ (': input [имя]'). Live ('change onkeyup', foo);' работает так, как ожидалось. Это злобно круто! –

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