2013-02-08 13 views
31

私の機能を引き起こす要素の中にあるチェックボックスをチェック/チェック解除するには、どのような方法が適していますか?jQueryチェックボックスのチェック/チェックを外す

<table id="news_list"> 
<tr> 
    <td><input type="checkbox" name="news[1]" /></td> 
    <td>TEXT</td> 
</tr></table> 

$("#news_list tr").click(function() { 
    var ele = $(this).find('input'); 
    if(ele.is(':checked')){ 
     ele.removeAttr('checked'); 
     $(this).removeClass('admin_checked'); 
    }else{ 
     ele.attr('checked', 'checked'); 
     $(this).addClass('admin_checked'); 
    } 
}); 

問題は、私がチェックし、一度だけ、各ボックスをオフにすることができます:

は、ここに私のコードです。私がチェックしたりチェックを外したりした後でも、クラスを追加/削除しますが、ボックスを再度チェックすることはありません(テーブル行ではなくチェックボックスをクリックしても)。

.bind( 'click')トリガーを使用してみましたが、同じ結果です。

すべてのソリューションはありますか?

+0

回答を見ると、あなたがしようとしていることに対する解決策がないとは限りません。私は基本的にチェックボックスを無効にするのがなぜ理にかなっているのか分かりません。チェックボックスをクリックするとチェックされ、if文がすぐにチェックを外すということです。実際のチェックボックスをクリックしてチェックボックスをチェックすることは決してできません...)?これはあなたがやろうとしていることですか?:http://jsfiddle.net/7gbhf/ – Joonas

+0

@Joonasありがとう、これは私が必要としていたものです!ジャイの答えは、複数行ではなく、signle行で動作しました – user1587985

+0

良いです。しかし、一つのこと。私のjsfiddleがあなたが必要とするものであれば、私はJaiの答えが1つの行に対してどのように働くかはわかりません。チェックボックスをクリックしてチェックボックスをチェックさせることはできません。これは、上で説明したif文のためです。だから私はあなたがその部分を逃したと思っている、または...私はまだあなたが望んでいるか分からない:) – Joonas

答えて

42

使用.prop()を使用し、このような フォーム要素の確認、選択、または無効状態としてDOMのプロパティを変更するには:

$("#news_list tr").click(function() { 
    var ele = $(this).find(':checkbox'); 
    if ($(':checked').length) { 
     ele.prop('checked', false); 
     $(this).removeClass('admin_checked'); 
    } else { 
     ele.prop('checked', true); 
     $(this).addClass('admin_checked'); 
    } 
}); 

変更:

    jsbin

    ルック

  1. inputから:checkboxに変更されました。
  2. checked checkboxesthe lengthを比較する。
+0

'prop'は私のために働いていませんでしたが、' removeAttr'と 'attr'はjQuery 1.9.1を使っていました。 – machineaddict

+0

おかげで、小道具は私のために別の問題を選別したので、この情報は非常に便利でした。 –

+0

@NickLewisようこそ。 – Jai

19

checkedの値を設定するには、attr()の代わりにprop()を使用します。また、inputではなく、findメソッドで:checkboxを使用してください。 jQueryの1.6のよう

Live Demo

$("#news_list tr").click(function() { 
    var ele = $(this).find('input'); 
    if(ele.is(':checked')){ 
     ele.prop('checked', false); 
     $(this).removeClass('admin_checked'); 
    }else{ 
     ele.prop('checked', true); 
     $(this).addClass('admin_checked'); 
    } 
}); 

Use prop instead of attr for properties like checked

、.ATTR()メソッドが設定されていない属性 ため未定義返します。私たちはあなたのコードで行く場合は代わりにして、このように比較検索して、 .prop()メソッド

+0

http://api.jquery.com/checkbox-selector/チェックボックスはjQuery拡張であり、そうではないCSS仕様の一部である:checkboxを使用したクエリは、ネイティブのDOM querySelectorAll()メソッドによって提供されるパフォーマンスの向上を利用できません。現代のブラウザーでのパフォーマンスを向上させるには、代わりに[type = "checkbox"]を使用してください。 –

+0

作品いいえ)ありがとう – rusllonrails

+1

これは正しい解決策です。受け入れられた答えにはいくつか問題があります。このソリューションをありがとう。 – Manik

5
$('mainCheckBox').click(function(){ 
    if($(this).prop('checked')){ 
     $('theControledCheckBoxes').prop('checked', true); 
    }else{ 
     $('theControledCheckBoxes').prop('checked', false); 
    } 
}); 
関連する問題