1

このフィドルをチェックしてください:http://jsfiddle.net/5rmEe/61/

    var inputVal = false;
    //allow user to deselect a radio button by clicking a checked radiobutton
    $('input[type=radio]').each(function(){
      var inputObj = $(this);
      inputObj.click(function(e){
        if(inputVal === inputObj.val()){
          inputVal = false;
          inputObj.attr('checked', false);
        }
        else{
          inputVal = inputObj.val();
          inputObj.attr('checked', 'checked');
        }
        e.stopPropagation();
      });
    });

$('.asdf').click(function(){
    $('.haha').trigger('click');
});

asdfsdaf スパンがラジオ ボタンのクリックをトリガーすることに注意してください。

まず第一に、ラジオボタンは、チェックされたラジオボタンをクリックするとそれ自体がチェック解除され(試してみてください)、ラジオボタン自体をクリックすると機能するように設定されています

スパンをクリックすると、チェックボックス自体が適切にチェックされますが、スパンを再度クリックすると、明らかにクリックイベントを実行し、理論的にはラジオのチェックを外す必要がありますが、ラジオボタンがオフに設定されませんクリック イベントにより、それに応じてボタン (このイベントは、ラジオ ボタンを実際にクリックした場合に機能します)

なぜこうなった?イベントが .trigger() を使用して手動でトリガーされた場合、attr() メソッドは機能しませんか?

ラジオボタンがチェックされているときに、スパンをクリックするとラジオボタンのチェックが外されるようにするにはどうすればよいですか?

4

2 に答える 2

3

triggerHandlerの代わりに使用しtriggerます。

$('.haha').triggerHandler('click');

これにより、クリックのデフォルトの動作を引き起こすことなくハンドラーが起動されます。

于 2012-10-24T21:31:27.803 に答える
0

preventDefault()次のように、クリック ハンドラー内から呼び出すことで、デフォルトのクリック アクションを防ぐことができます。

 inputObj.click(function(e){
        e.preventDefault(); //add this to prevent default click behaviour 
        if(inputVal === inputObj.val()){
          inputVal = false;
          ...
          ...

作業フィドルを参照してください

于 2012-10-24T21:42:17.460 に答える