2012-04-24 10 views
3

現在のJQueryでは、ユーザーがテーブルの行をクリックするとチェックボックスをオンまたはオフにするイベントがあります。この問題は、ユーザーが実際にチェックボックスをチェックすると、jqueryがチェックボックスイベントで発生し、チェックボックスをオンまたはオフにしますが、TRイベントが発生してチェックボックスの値が元に戻されます。Jquery:チェックボックスで 'click'イベントを無効にする

ここでは例を参照してください:http://jsfiddle.net/radi8/KYvCB/1/

を私はチェックボックスを無効にすることができますが、ユーザーがチェックボックスを選択しようとすると、その後、TRのイベントがトリガされません。

私が必要とするのは、チェックボックスの 'クリック'イベントを無効にする方法ですが、チェックボックスをオンにするとTRイベントが発生するようにします。

var charges = { 
    init: function() { 
     // get the selected row checkbox 
     //$('.charges').attr('disabled', true); 
     $('.rowclick tr').click(function() { 
      if ($(this).find('td input.charges:checkbox').is(':checked')) { 
       $(this).find('td input.charges:checkbox').attr("checked", false); 
      } 
      else { 
       $(this).find('td input.charges:checkbox').attr("checked", true); 
      } 
     }); 
    } 
}; 
charges.init(); 
+0

?何が結果なのか、何を期待していますか? – Alp

+0

[この例](http://jsfiddle.net/radi8/KYvCB/1/)が掲載されました...あなたの質問は正確に何ですか? – JKirchartz

+0

JKirchartz:いいえ、それは動作していない、チェックボックスをクリックすると、2回トグルされます – tarmaq

答えて

14

あなたはclickイベントがどこかcheckboxかに解雇されたかどうかを確認する必要があります。 これは、e.stopPropagationというチェックボックスの2番目のイベントハンドラより少ないリソースを必要とします。

$('.rowclick tr').click(function(e) { 
     if($(e.target).closest('input[type="checkbox"]').length > 0){ 
      //Chechbox clicked 
     }else{ 
      //Clicked somewhere else (-> your code) 
      if ($(this).find('td input.charges:checkbox').is(':checked')) { 
       $(this).find('td input.charges:checkbox').attr("checked", false); 
      } 
      else { 
       $(this).find('td input.charges:checkbox').attr("checked", true); 
      } 
     } 
    }); 

の作業例:正確にあなたのコードに問題があるものをhttp://jsfiddle.net/KYvCB/5/

+0

テーブルの外にもう一つのチェックボックスがあるとどうなりますか? ;] – tarmaq

+0

何もありません。それはちょうど正常に動作します。どうして?フィドル:http://jsfiddle.net/KYvCB/7/ – Alex

+0

これは完全に動作します!助けてくれてありがとう。いつものように、このリストの皆さんが最高です! – radi8

2

あなたはclickイベントの伝播を停止する必要があります。

var charges = { 
    init: function() { 
     $('.td input.charges:checkbox').on('click', function (e) 
     { 
      e.stopPropagation(); 
     }) 
     $('.rowclick tr').click(function() { 
      if ($(this).find('td input.charges:checkbox').is(':checked')) { 
       $(this).find('td input.charges:checkbox').attr("checked", false); 
      } 
      else { 
       $(this).find('td input.charges:checkbox').attr("checked", true); 
      } 
     }); 
    } 
}; 
charges.init(); 

http://jsfiddle.net/KYvCB/4/

関連する問題