1

以下のコードで興味深い問題が発生します。

<html>
<head>
    <meta charset="UTF-8"/>
    <script src="jquery-1.3.2.min.cache.js">
    </script>
    <script>
        $(function(){
        var c = function(){
                  console.log('checked:' + $('#test').attr('checked'));
                };
        $('#test').click(c);
    });
    </script>
</head>

<body>
    <input id="test" type="checkbox" value="1">test
  </input>
</body>
</html>

問題は、チェックボックスを手動でクリックしたときに印刷されることです

checked:true
checked:false
checked:true
checked:false 
....

しかし、次のようなjsコ​​ードでクリックイベントをトリガーすると:

$('#test').click()

のように印刷されます

checked:false
checked:true

手動でクリックしたように聞こえますが、チェックボックス自体がオン/オフとしてレンダリングされ、クリックイベントがトリガーされます。

しかし、 の JS コードの.click()場合はそうではありません。

私の推測は正しいですか?ヘルプのために参照できるドキュメントはありますか?

4

1 に答える 1

2

問題は、チェックボックスを手動でクリックしたときに印刷されることです

チェック:真 チェック:偽

私は得る:

> checked:true
> checked:undefined

メソッドはかなりひどいです (以前はattr属性とプロパティを混同していましたが、おそらく今でもそうです)、プロパティを直接読み取るか、prop. 次のように書く方がはるかに効率的です。

   console.log('checked:' + this.checked);

とにかく、これが私の以前のコメントです:

おそらく、jQuery が DOM メソッドをバイパスする独自のイベント登録および起動フレームワークを使用しているためです。ボタンを手動でクリックすると、DOM シーケンスのイベントが取得されます。jQuery を使用すると、jQuery の一連のイベントを取得できます。

于 2012-10-09T05:48:30.753 に答える