javascript - 为什么间接更改复选框时不会触发复选框上的 onchange

标签 javascript prototype checkbox onchange

我正在使用 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 中测试过,都无法正常工作。我不是在寻找解决方法,我只是想知道为什么这不起作用。

最佳答案

这在一般的 UI 框架中并不少见。如果您以编程方式更改控件的状态,则假定您也能够以编程方式触发它应该具有的任何副作用。它为程序员提供了更大的灵 active ,并且避免了在初始化或拆卸期间状态不断变化的错误。 (例如,在初始化期间,您可能会在设置多个相关控件的状态之前设置一个控件的状态。如果第一个控件的更改处理程序立即触发,它将在其他控件处于不一致状态时执行。)

关于javascript - 为什么间接更改复选框时不会触发复选框上的 onchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2161213/

相关文章:

javascript - javascript中带构造函数的对象和闭包的区别

javascript - 仅使用书签在 Chrome 中触发复选框 onchange 事件

javascript - iCheck 复选框未在 angularjs 中显示

jquery - 许多复选框组和 "select all"

javascript - 使用ajax功能后页面保持重新加载

javascript - 我使用 Fabric 在 Canvas 上绘制的所有内容都是偏移的

javascript - 呈现模板时的 AngularJS 指令

javascript - Response 的数据部分是一个长脚本而不是所需的 json 对象

javascript - 如何正确创建 Javascript 原型(prototype),使类变量不会在实例化之间持续存在?

javascript - 为什么改变对象的 [[prototype]] 会降低性能?