11

このjsFiddleを参照してください:

http://jsfiddle.net/nathanfriend/vAcpc/9/

PreventDefault()メソッドは、クリックされたラジオボタンの切り替えを妨げないようです(以前の状態に関係なく、メッセージには常に「このラジオボタンがチェックされました」と表示されます)。ただし、onclick()メソッドが終了すると、ラジオボタンは初期状態に戻ります(ラジオボタンが最初に選択された場合を除く)。

PreventDefault()は、ラジオボタンが実際にチェックされないようにするのではなく、ボタンのセットを以前の状態に戻すだけで機能するようです。誰かがこの振る舞いを説明できますか?ラジオボタンが切り替えられないように完全に防止したいのですが、こうすることで、ラジオボタンがonclick()メソッド内でチェックされているかどうかを正確に確認できます。何か案は?

4

1 に答える 1

12

実際には、mousedownイベントが最初に発生し、ラジオボタンを確認します。ラジオボタンの上でマウスボタンを押し続けると、これを簡単に確認できます。ただし、ほとんどすべてのGUI要素は、両方が起動されて正常に実行された場合にのみ実行または変更されmousedownますmouseup

この例(デモ)を参照してください。

$(function() {
    $('[name="test"]').each(function() {
         $(this).mousedown(function(e) {
            e.preventDefault();
            if ($(this).is(':checked')) {
                alert('This radio button was checked in mousedown');                
            } else {
                alert('This radio button was not checked in mousedown');
            }                    
        });
        $(this).click(function(e) {
            e.preventDefault();
            if ($(this).is(':checked')) {
                alert('This radio button was checked');
            } else {
                alert('This radio button was not checked');
            }                    
        });
    });           
});

ご覧のとおり、mousedown最初に起動され、「このラジオボタンはマウスダウンでチェックされていません」という警告が表示されます。click実際のmouseupイベントは厄介なアラートによってキャンセルされるため、イベントは防止されます。ただし、使用すると、それがまだ実行され、ラジオボタンが仮想的にチェックされているconsole.logことに気付くでしょう。click

ただし、アクティブなラジオボタンを確認すると、アクティブなラジオボタンがないことがわかります。要素の振る舞いclickは時々苛立たしいものですが、e.preventDefault()それは仕事をします、心配しないでください。

于 2012-04-12T05:54:45.253 に答える