2010-06-10 80 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); 

然而,有这样的活动集更新,只要添加新的输入元素。

我认为这是可能的form节点上捕捉keyup事件与$("form").keyup(on_change),但我不是很确定一个能捕捉怎么事件change

我也想这样捕获keyup事件。

谢谢您的阅读。

布赖恩

回答

6

您正在寻找live events
例如:

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

添加使用.live将处理选择不管匹配,加入时,他们的所有元素的事件处理器。

+1

你可以这样做:输入[name]来获取所有命名的元素。 – 2010-06-10 22:47:11

+0

是的,'$(':input [name]')。live('onkeyup',foo);'按预期工作。这真是太酷了! – 2010-06-11 01:26:33