【发布时间】:2016-10-06 14:18:45
【问题描述】:
我正在尝试检测复选框何时发生更改,但到目前为止已尝试使用 onchange、onclick 和 [just] click 均未成功。我已经“继承”了复选框的 HTML(通过 Smarty 模板构建),这些复选框是按照此处构建的:-
<input type="checkbox" name="field1[]" id="field1_1" value="80000" />
<label for="field1_1">80000</label>
<input type="checkbox" name="field1[]" id="field1_2" value="80001" />
<label for="field1_2">80001</label>
<input type="checkbox" name="field1[]" id="field1_3" value="80002" />
<label for="field1_3">80002</label>
<input type="checkbox" name="field1[]" id="field1_4" value="80003" checked />
<label for="field1_4">80003</label>
<input type="checkbox" name="field1[]" id="field1_5" value="80004" />
<label for="field1_5">80004</label>
<input type="checkbox" name="field1[]" id="field1_6" value="80005" />
<label for="field1_6">80005</label>
在 javascript 中,我在这里为复选框声明了一个对象:-
<script>
parent_obj_field1 = document.getElementsByName('field1[]');
</script>
然后,我针对该对象声明一个“单击”函数,该对象本身旨在运行另一个“检索”函数。后面的“检索”函数根据复选框的值执行 AJAX 调用并填充另一个控件。
<script>
parent_obj_field1[0].click = function() {
child_obj_field3_retrieve_data();
}
</script>
我已将此处显示的“点击”替换为“更改时”和“点击”,但无济于事。我已经阅读了许多文章,其中一篇建议我可能必须添加一个事件侦听器......但我不完全确定我的案例所需的语法?
您能否建议我在用户单击/取消单击集合中的任何框时如何触发事件?
谢谢
编辑
所以为了扩展 Saurabh Srivastava 的评论,我添加了
parent_obj_field1[0].addEventListener('change', function (event) {alert('changed') });
但是当我单击任何框时没有收到警报?我可能会误解这是如何工作的?
【问题讨论】:
-
能否请您提供一个 jsfiddle 到目前为止您所拥有的内容,以便我们自己测试和检查问题。
-
您仅在第一个
field1[]上附加了一个事件处理程序,如果您想将它附加到其余元素,则必须进行迭代。如果要将其附加到使用 ajax 获取的动态生成的元素,则必须在加载和插入元素后附加事件处理程序,或者使用委托事件处理程序,这在不使用库时可能会有点复杂(如 jQuery )。 -
使用此代码
parent_obj_field1[0].addEventListener('change', function (event) { } -
HI... 添加此事件侦听器是否意味着我不需要更改 HTML 标签?
-
所以我添加了 parent_obj_field1[0].addEventListener('change', function (event) {alert('changed') });但是当我单击任何框时没有收到警报?我可能误解了它是如何工作的?
标签: javascript checkbox onclick click onchange