-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 回答