-1

チェックされたチェックボックスの値を取得し、ボタンのクリック時にデータを送信する次のコードがあります。コードを調べて、間違っているところを教えてください。動作していません

$(document).ready(function() {
$(function(){
  $('#btnClick').click(function(){
    var val = [];
    $(':checkbox:checked').each(function(i){
      val[i] = $(this).val();
      $.ajax({
            url: 'server.php',
            type: "POST",
           data: ({val[i]}), ????
           success: function(data){

            }
        });


    });
  });
});
});
4

2 に答える 2

3

serializeを使用する方が簡単で、まさにこのような状況向けに設計されています。

$(function(){
  $('#btnClick').click(function(){
   var val = $('input[type=checkbox]:checked').serialize();
   $.ajax({
        url: 'server.php',
        type: "POST",
        data: val,
        success: function(data){

        }
    });

   });
 });

また、 の$(input[type=checkbox]:checked)代わりにセレクターとして使用することをお勧めします$(':checkbox:checked')。jQuery ドキュメントから:

$(':checkbox') は $('[type=checkbox]') と同等です。他の疑似クラス セレクター (「:」で始まるもの) と同様に、タグ名または他のセレクターを前に付けることをお勧めします。それ以外の場合は、ユニバーサル セレクター (" ") が暗示されます。つまり、そのままの $(':checkbox') は $(' :checkbox') と同等であるため、代わりに $('input:checkbox') を使用する必要があります。

:checkbox は jQuery 拡張機能であり、CSS 仕様の一部ではないため、:checkbox を使用するクエリは、ネイティブ DOM の querySelectorAll() メソッドによって提供されるパフォーマンス向上を利用できません。最新のブラウザーでパフォーマンスを向上させるには、代わりに [type="checkbox"] を使用してください。

于 2012-12-22T08:21:52.677 に答える
1
  • ajax 関数をeachループの外に置いてください。
  • $(function(){})&$(document).ready(function(){})は同一のものです。前者は省略形です。

    $(function(){
      var val[], i=0;
      $('#btnClick').click(function(){
          $('input:checkbox:checked').each(function(){
          val[i] = $(this).val();
          i++;
        });
         $.ajax({
                url: 'server.php',
                type: "POST",
               data: {'checked_values':val},
               success: function(data){
                    // do something with returned data
                }
         });
      });
    
    });
    

server.phpページ

$checked = $_POST['checked_values']; // will contain an array with checked values
// proceed to do something with $checked array
于 2012-12-22T08:16:42.260 に答える