2011-10-20 11 views
0

特定のIDを使用しているチェックボックスがクリックされているかどうかを確認しようとすると、ひどい問題があります。チェックされている同じIDのチェックボックスの数を確認してください

チェックボックスの例は

<input name="our_list[]" value="AB1-A" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB1-B" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB1-C" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB1-D" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB2-A" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB2-B" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB2-C" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" /> 
<input name="our_list[]" value="AB2-D" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" /> 

であり、私の最新のスクリプトが

<script type="text/javascript"> 
$(document).ready(function() { 
    $('.listheck').click(function(){ 
     var thisID = $(this).attr('id'); 
     var checked = $('#'+thisID+':checkbox:checked').length; 
     alert(thisID+" Number checked:" + checked); 
    }); 
}); 
</script> 

アラートは、チェックボックスのIDを示すが確認された値は、それらが確認された場合でも、常に0である

です

私は各要素のIDが一意でなければならないことを知っていますし、問題があるかもしれないし、IDにスペースが入っているかもしれませんが、これはすでに開発されているシステム用です残念ながら私はそれが動作する方法を変更できません。

アイヴはここではさまざまなソリューションを試しましたが、私が必要とするものはありません。

ありがとうございました

+2

IDが一意であることになっている実施例を参照してください。そのクラス名を使用してください。 ex:class = "listheck AB1" – Corneliu

+0

複数の要素が同じIDを持つのはなぜですか? –

+0

なぜあなたはそれらをidで探す必要がありますか?あなたは既に '$(this)'でクリックされた要素を持っています。チェックされている場合はチェックしてください。 –

答えて

1

IDは一意である必要があります。しかし、コードを変更できない場合、これはうまくいくはずです:

$(document).ready(function() { 
    $('.listheck').click(function(){ 
     var checkedTotal = {}; 
     $(".listheck").each(function(index, el) { 
      var id = $(el).attr("id"); 
      if ($(el).prop("checked")) { 
       if (!checkedTotal[id]) { 
        checkedTotal[id] = 1; 
       } 
       else { 
        checkedTotal[id] = checkedTotal[id]+1; 
       } 
      } 
     }); 
     var msg = ""; 
     for (var p in checkedTotal) { 
      msg += p + " # Checked: " + checkedTotal[p] + "\n"; 
     } 
     alert(msg); 
    }); 
}); 
0

idで検索するのではなく、それらのチェックボックスをグループ化する何か他のものを探してみてください。 idの代わりにname属性で検索してみてください。 Jqueryは、仕様に従って、特定のIDを持つ要素が1つしかないと予想しているjsメソッドを使用しています。おそらく最初のものを返すのはたった今です。構造体を修正できない場合は、id以外のセレクタを使用してください。

0

このコードでは、id(最初の要素はidが要素のため一意であるため)でチェックされます。 実際、試してみるとhereは、現在チェックされているチェックボックスが1つしかないという結果が得られます。

代わりに.eachメソッドを使用して、現在チェックされているすべてのチェックボックスをループし、指定されたチェックボックスの数がいくつあってもidになるようにすることができます。

$(document).ready(function() { 
$('.listheck').click(function(){ 
    var thisID = $(this).attr('id'); 
    var checked = 0; 
    $('.listheck:checked').each(function(index, val) { 
     if ($(this).attr('id') == thisID) { 
      checked++; 
     } 
    }); 
    alert(checked + ' checkbox with id ' + thisID + ' are checked'); 
    }); 
}); 

here

+0

完璧に働いてくれてありがとう。ありがとうございます – user1004967

0
$('[id="AB1 OB 90xs r5Ty"]').length 
+0

あなたの解決策について教えてください。 – NEER

+0

同じIDのチェックボックスを検索する場合は、tag [id = ""]を使用してください。長さ 警告のある例: alert($( '[id = "AB1 OB 90xs r5Ty"]')。 ; 結果:4 –

関連する問題