1

I need to get all input elements within a div and then attach event handlers, so that whenever values change it updates a hidden field. Children elements within the div might already contain event handlers, if so the attach should chain it.

Any help is much appreciated.

4

3 回答 3

2
$("#divID :input").change(function(){
    // write your code here
});

其中 divID 是 div 的唯一 ID。这将选择 div 内的所有输入、文本区域、选择和按钮元素。

请参阅:输入选择器

如果要避免使用按钮元素,可以使用 not 运算符,例如

$("#divI :input:not('button')").change(function(){

});
于 2010-03-09T04:34:10.677 回答
1

jQuery 自动处理链接,所以以下应该可以工作:

$("div input").change(function() { whatever(); });
于 2010-03-09T03:28:31.837 回答
1

好吧,我很好奇为什么您需要更新隐藏字段并复制数据。但是,如果您坚持,这里有一个“一刀切的解决方案”,尽管您这样做可能会失去一些灵活性,而不是手动附加每个元素。

首先,HTML:

<form id="form">
   <input type="text" id="txtName" />
   <input type="hidden" id="hdnName" />

   <input type="text" id="txtEmail" />
   <input type="hidden" id="hdnEmail" />

   <select id="selGender">
      <option value="male">Male</option>
      <option value="female">Female</option>
   </select>
   <input type="hidden" id="hdnGender" />
</form>

现在,Javascript:

$(document).ready(function() {
   $("#form").find("input[type='text'], select").change(function() {
      $this = $(this);

      var id = $this.attr("id");
      id = id.split(3, id.length - 1);

      $("#hdn" + id).val($this.val())
   });
});

为此,它假定您将每个字段都作为text字段,并且它们遵循我在此处使用的命名约定 ( [txt|sel]FieldName, hdnFieldName)

于 2010-03-09T03:48:00.910 回答