2010-03-09 93 views
1

我需要获取div中的所有输入元素,然后附加事件处理程序,以便每当值更改时都更新一个隐藏字段。如果是的话,div中的子元素可能已经包含了事件处理程序,如果是这样的话,attach应该链接它。JQuery输入元素

任何帮助,非常感谢。

回答

1

jQuery的自动处理链,所以下面应该工作:

$("div input").change(function() { whatever(); }); 
+0

我已经把警报在函数体中,但我没有得到任何警报。对你起作用吗?我正在测试选择框。顺便说一下,可以有各种输入元素,包括选择,文本框,单选按钮等。 – codeasp 2010-03-09 03:44:43

+0

是的,我的代码至少应该用于文本框,单选按钮和选择框(文本框仅在失去焦点时才会触发,虽然,不是每次按键)。 它不起作用的最可能的原因是你没有选择你期望在选择器中的元素(即“div输入”位)。要测试这个理论,请尝试: $(“div input”)。each(function(){alert(this);}); 这应该告诉你,如果你实际选择正确的元素。 – 2010-03-09 03:52:10

+1

但它不适用于选择框,因为它仅查找输入标签。您需要将选择器更改为$(“input,select”)。 – monksp 2010-03-09 04:04:42

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]FieldNamehdnFieldName

+0

这会将事件处理程序附加到文本区域吗? – rahul 2010-03-09 04:42:09

+0

不像它写的那样,尽管以这种方式扩展这些代码并不困难得多。 (如果我没有弄错,可以像选择支持一样简单地添加textarea支持) – 2010-03-09 05:51:29

+0

我的要求是我有一个div,html元素通过html模板插入。每当div元素中的任何html元素值发生变化时,我需要遍历所有元素并将其值存储在一个隐藏字段中,我可以从服务器端检索这些字段。 – codeasp 2010-03-09 19:18:46

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

其中divID是div的唯一ID。这将选择div内的所有输入,textarea,select和button元素。

:input Selector

如果你想避免按钮元件可以使用运营商不喜欢

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

});