【问题标题】:Call Ajax or submit the button when checkbox is checked选中复选框时调用 Ajax 或提交按钮
【发布时间】:2018-11-03 05:15:55
【问题描述】:

我有以下 PHP while 循环,它将数据显示为复选框。复选框可以是多个,也可以是一个。

<?php
$supplier = new Admin;
$supplier->rowQuery("SELECT * FROM supplier");

echo '<form id="formId">';
    while ( $data = $supplier->result->fetch_assoc()) {        

        $sid          =  (int) $data['sid'];
        $supplierName = output($data['supplierName']);

        echo '<label class="checkbox-inline">';
            echo "<input type='checkbox' name='sid[]' data-sid='$sid' value='$sid' class='supplierClass'> $supplierName";
        echo '</label>';
    }
echo '<input type="hidden" name="submit" value="supplier" class="clickBtn">';
echo '</form>';
?>

现在我想在至少一个复选框或多个复选框被选中时调用 Ajax。所以要做到这一点,我有以下 Javascrpt:

$('.supplierClass').click(function() {
var sid = $(this).data('sid');
if(this.checked){
   // $("input[type=submit]").trigger(".clickBtn");
   $('.clickBtn').trigger();
   $('#formId').submit(function() {
      $.ajax({
        url         :   'process/get-vehicle.php',
        type        :   'POST',
        dataType    :   'html',
        data        :   {
          sid   :  sid,
        },
        beforeSend  :   function () {
            $('.allVehicle').html('Please wait...');
        },
        success     :   function ( result ) {
            $('.allVehicle').html(result);
        }
    });
  });
}
});

但它不叫 Ajax :(

总体目标

您可以看到我已将复选框名称设置为arraysid[]。因为我需要将所有复选框选中的数据作为 PHP 文件中的数组获取。

所以如何在检查一个或多个复选框时调用ajax? 请注意:在 PHP 文件中,我想获取所有复选框或一个复选框值。

我的想法:

我认为应该有一个隐藏的提交按钮。当我点击任何复选框时,它应该按下 jQuery 的隐藏按钮来调用 Ajax。

【问题讨论】:

  • clickBtnhidden 类型吗?另外,我不建议在复选框的单击处理程序中绑定表单提交事件
  • 您不需要任何提交按钮,只需在选中复选框时触发AJAX请求并将序列化表单作为数据提交即可。
  • @hungrykoala 让我试试。
  • @hungrykoala 你的意思是这个序列化:data : $('#formId').serialize(),
  • 是的,这将获取该表单的所有可用数据

标签: javascript php jquery ajax checkbox


【解决方案1】:

去掉submit事件,使用change事件,获取所有选中的sids

$('.supplierClass').change(function() {

if( $('.supplierClass:checked').length){
 var sids = [];
 $('.supplierClass:checked').each(function(i,v) {//get all the sids of the elements checked
     sids.push($(v).val());
  });
      $.ajax({
        url         :   'process/get-vehicle.php',
        type        :   'POST',
        dataType    :   'html',
        data        :   {
          sid   :  sids,
        },
        beforeSend  :   function () {
            $('.allVehicle').html('Please wait...');
        },
        success     :   function ( result ) {
            $('.allVehicle').html(result);
        }
    });
}
});

【讨论】:

  • 这是有效的,但在 PHP 中我只能获得 1 个 sid 值。我需要获取所有 sid 值。我的意思是如果选中所有复选框,那么我应该得到所有复选框数据。
  • 太好了,现在我可以将所有复选框值作为多维数组获取。没有多维数组有可能吗?
  • 为什么叫多维数组?存储多个值?你不知道如何在 php 中循环?
  • 您可以根据需要为每个选中的元素创建一个键/值对
  • 类似var sids = {}; $('.supplierClass:checked').each(function(i,v) { sids['element'+i] = $(v).val()); });
【解决方案2】:

不需要提交按钮来执行 ajax 请求。我修改了你的代码。希望这个能满足你的要求。

$('.supplierClass').change(function () {
   var sid = $(this).data('sid');
   if ($(this).is(":checked")) {
      $.ajax({
         url: 'process/get-vehicle.php',
         type: 'POST',
         dataType: 'html',
         data: {
            sid: sid,
         },
         beforeSend: function () {
            $('.allVehicle').html('Please wait...');
         },
         success: function (result) {
             $('.allVehicle').html(result);
         }
      });
  }
 });

我已经在复选框更改事件上触发了 ajax 调用,并且仅在它被选中时触发。

【讨论】:

    【解决方案3】:

    $(document).on("click", '.supplierClass:checked', function() {
      var sid = $(this).val() // gets the sid 
      alert('clicked checkbox => ' + sid); // checking if this code gets called
      $.ajax({
        url: 'process/get-vehicle.php',
        type: 'POST',
        dataType: 'html',
        data: {
          sid: sid,
        },
        beforeSend: function() {
          //Code Goes here
        },
        success: function(result) {
          //code goes here
        },
        error: function(err) {
          //code goes here
        }
      });
    })
    body {
      background: #20262E;
      padding: 20px;
      font-family: Helvetica;
    }
    
    #banner-message {
      background: #fff;
      border-radius: 4px;
      padding: 20px;
      font-size: 25px;
      text-align: center;
      transition: all 0.2s;
      margin: 0 auto;
      width: 300px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="banner-message">
      <p>Check Box</p>
    
      <input type='checkbox' name='sid[]' data-sid='$sid' value='1' class='supplierClass'>
      <br>
      <input type='checkbox' name='sid[]' data-sid='$sid' value='2' class='supplierClass'>
      <br>
      <input type='checkbox' name='sid[]' data-sid='$sid' value='3' class='supplierClass'>
      <br>
    </div>

    此代码仅在复选框被选中并将一个复选框值发送到 PHP 服务器时运行,您不需要隐藏的提交按钮来执行此操作

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2015-10-14
      • 1970-01-01
      • 2021-12-18
      • 2019-06-17
      • 2014-07-08
      相关资源
      最近更新 更多