7

我正在寻找一种方法来检测复选框选中值何时已更改。addEventListener()或 jQueryon()主要工作,但都不会检测到以这种方式进行的更改:

<input type="checkbox" id="testCheckbox">

<!--- some other script further down the page, not under my control -->
<script type="text/javascript">
   document.getElementById("testCheckbox").checked = true;
</script>

有没有办法可以检测到这种变化?即使是只适用于最新浏览器的东西也会很棒。

编辑:要清楚,我想检测页面上任何脚本所做的更改。我不一定能控制它们,所以我不能自己触发事件。

4

4 回答 4

4

我不认为有一个优雅的方式。有一个Object.observe关于 Javascript 未来版本的提案。

现在,您应该按照未定义的建议触发更改事件。您还可以定义一个 setter 函数来change为您设置值和触发器。

于 2013-01-24T11:56:32.257 回答
4

对于它的价值(我想说不多),您可以在 IE 中仅使用其专有propertychange事件来执行此操作。在其他浏览器中,我很确定您现在唯一的选择是轮询。

演示:http: //jsfiddle.net/X4a2N/1/

代码:

document.getElementById("testCheckbox").onpropertychange = function(evt) {
    evt = evt || window.event;
    if (evt.propertyName == "checked") {
        alert("Checkedness changed!");
    }
};
于 2013-01-24T12:16:20.330 回答
2

这是不可能的。您必须手动触发 Change 事件。

    调用 CheckboxStateChange 事件的操作:
          1. 通过鼠标点击改变复选框的状态。
          2. 使用访问键更改复选框的状态。
          3. 使用 SPACE 键更改复选框的状态。

    不调用 CheckboxStateChange 事件的操作:
          1. 从脚本更改选中属性的值。
于 2013-01-24T11:58:13.817 回答
0

目前,如果不使用轮询或使用像 React 这样监控状态的影子 DOM 框架,仍然无法做到这一点。这是因为复选框/收音机.checked = true属性更改是状态更改,而不是 DOM 突变。这是一个演示:

http://jsfiddle.net/6DHXs/1/

于 2016-10-29T15:11:35.657 回答