【发布时间】:2010-01-29 10:16:45
【问题描述】:
我正在使用 Prototype 来监视复选框,因此我可以向它们添加 javascript 检查。当checkbox所在的tr或td被点击时,checkbox应该被勾选。
当您直接单击复选框时,会触发 onchange 事件,因此您会收到警报。当复选框的值被 javascript 更改时(当您单击 tr 或 td 时),不会触发 onchange。为什么间接更改复选框时不触发onchange?
这是我正在使用的 javascript。
Element.observe(window, 'load', function() {
/* If a tr or td is clicked, change the value of the checkbox. */
$$('#results tr').each(function(el) {
el.observe('click', function(e) {
if(!e.target) { e.target = e.srcElement; }
if(e.target.nodeName == 'TD' || e.target.nodeName == 'TR') {
$('compare-product'+this.id).checked = ($('compare-product'+this.id).checked === false) ? true : false;
}
});
});
/* Monitor if the status of a checkbox has changed. */
$$('#results tr td input').each(function(el) {
el.observe('change', function(e) {
alert('!');
}
);
}
);
}
);
我已经在 Firefox 和 IE7 中测试过,都无法正常工作。我不是在寻找解决方法,我只是想知道为什么这不起作用。
【问题讨论】:
-
如果是,如果在事件处理代码中更改复选框的状态会发生什么?
-
我不明白你的意思。
-
如果您更改偶数处理程序中的状态,则将再次调用相同的事件处理程序。如果是这样,你可能有一个无限循环。
-
Mattias:如您所见,我正在更改 onclick 处理程序中复选框的状态,该处理程序设置在 tr 上。我看不出如何通过更改复选框的状态再次调用它。
标签: javascript prototype checkbox onchange