20

コードは以下にあり、チェックボックスは常にFALSEです。しかし、ページ上では異なります。チェックされたりチェックされなかったりすることはありません。

<script type="text/javascript">
 $('.cbOzelHastaAdi').unbind('click');

 $('.cbOzelHastaAdi').click( function() {

    var parentDiv = $(this).parent().get(0);
    var cbs = $(parentDiv).find('table input:checkbox');

   if($(this).attr("checked") === "true") {
        cbs.each(function() { $(this).attr('checked', false); });
    }
    else{
        cbs.each(function() { $(this).attr('checked', true); });
    }

})

</script>
4

8 に答える 8

39

問題の1つはchecked、上部のチェックボックスとラベルを囲むスパンに属性があり、イベントハンドラーをスパンにバインドしていたため、checked常にスパンにとどまるcheckedということでした。

代わりに、イベントハンドラーをチェックボックスに移動し、コードを少し整理しました。HTML要素に独自の属性を作成することに問題があるとは思いませんが(XHTMLの厳密な検証は失敗すると思います)、そうすることが良い習慣であると考えられているかどうかはわかりません。

IDマングリングに基づいてASP.NETを使用していることがわかります。サーバー側<%= myControl.ClientID %>を使用して、クライアントに送信されたHTMLでレンダリングするマングルIDを取得できます。

ここでの作業例

   $(function() {     
        $('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi').unbind('click');
        $('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi').click( function() {

           var cbs = $('table input:checkbox');  

           if($(this).is(':checked')){
               cbs.each(function() { $(this).attr('checked', true); });
           }
           else{
            cbs.each(function() { $(this).attr('checked', false); });
           }

        });
    });

編集:

あなたのコメントに応えて、clientidを解決するためのいくつかのオプションがあります。aspxページでjQueryを作成する場合は、次を使用できます。

$('#<%= cbOzelKurumHastasi.ClientID %>')

代わりに

$('#rptOzel_ctl00_rptOzelHastalar_ctl00_cbOzelKurumHastasi')

jQueryが外部スクリプトファイルにある場合は、これをaspxページに配置できます

<script type="text/javascript">
var cbOzelKurumHastasi = '#<%= cbOzelKurumHastasi.ClientID %>';
</script>

次に、外部スクリプトファイルで変数を使用します

$(function() {     
            $(cbOzelKurumHastasi).unbind('click');
            $(cbOzelKurumHastasi).click( function() { ...

他のオプションについては、この質問と回答をご覧ください-jQueryを使用するためにASP.NETがIDを変更しないようにする方法

于 2009-05-14T20:41:00.757 に答える
7

私は通常、これをチェックするためにjQueryの.is()機能を使用します

$('.cbOzelHastaAdi').click( function() {
  if($(this).is(':checked')){
    ...
  }else{
    ...
  }
})
于 2009-05-14T20:38:05.460 に答える
3

チェックされたプロパティの値をブール値ではなく文字列と比較し、値と型の両方を比較する===演算子を使用していることが原因である可能性がありますか?

于 2009-05-14T20:33:25.223 に答える
1

私は同じ問題に出くわしました。チェックボックスがチェックされているかどうかをチェックすると(さまざまな方法で)、常にfalseが返されます。

私の解決策(問題のコース)は、使用されたJQueryセレクターにありました。

uzay95は、クラスセレクター「。」を使用してチェックボックスを選択しました。

$('。cbOzelHastaAdi')**

結果セットを返します。そのため、チェックボックスが複数ある可能性があるため、チェックされているかどうかのチェックは無効です...彼がコードでthisキーワードを使用していることは知っていますが、私にとってはこれでも問題は解決しませんでした。

IDでチェックボックスを選択するとすぐに、その「チェック済み」属性を評価できます。

于 2011-08-23T14:05:57.443 に答える
0

===はJSのタイプセーフコンパレータです

参照: https ://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators

于 2010-01-26T14:49:26.957 に答える
0

jQueryでチェックされたステータスを判断するには、おそらく次の方法が最適であることがわかりました。

var cbs = $(parentDiv).find('table input:checkbox:checked');

これにより、チェックされた各入力の配列が得られます。

これは主にjQueryドキュメントからのものです:

セレクター/チェック済み

于 2009-05-14T20:34:29.603 に答える
0

Russ Camの答えは機能しますが、jQueryifyしてみませんか?

$(function() {     
    $('.cbOzelHastaAdi').live('click', function() {
        $(this).parents('div').find('table input:checkbox').attr('checked', $(this).attr('checked'));
    });
});

これは、クラスcbOzelHastaAdiがspan要素ではなくチェックボックスにアタッチされていることを前提としています。これにより、面倒なASPの名前変更をすべて回避し、複数のクリックイベント関数を必要とせずにページごとに複数の同様のテーブルを使用できるようになります。

于 2009-05-14T21:01:56.417 に答える
0

これも機能しています:

(($('input[name="myCheckBox"]:checked').val())=='on')

trueまたはfalseのいずれかを返します

チェックボックスは次のように定義されています。

<input type="checkbox" name="myCheckBox">
于 2013-08-26T11:02:01.880 に答える