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.observeJavascript の将来のバージョンに関する提案があります。

今のところ、未定義の提案どおりに変更イベントをトリガーする必要があります。値とトリガーを設定するセッター関数を定義することもでき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 に答える