【问题标题】:Select All Checkbox with Trigger - jquery全选带触发器的复选框 - jquery
【发布时间】:2018-01-19 19:47:34
【问题描述】:

在我的 SelectAll 复选框和点击触发器上应该适用于所有输入 - 上面有点击事件。

触发在 selectall 上工作,但取消选中 selectall not working。它没有取消选中所有输入

<input type="checkbox" id="SelectAll" />

<input class="checkBoxClass" name="pid[]" id="pid_1" value="1" onclick="javascript: total_select(1,0.35,2700.00);" type="checkbox">

<input class="checkBoxClass" name="pid[]" id="pid_2" value="2" onclick="javascript: total_select(2,0.35,2700.00);" type="checkbox">

<input class="checkBoxClass" name="pid[]" id="pid_3" value="3" onclick="javascript: total_select(3,0.35,2700.00);" type="checkbox">

低于我所做的

$(document).ready(function () {
    $("#SelectAll").click(function () {
      $(".checkBoxClass").attr('checked', $(this).attr('checked'));
        $(".checkBoxClass").change(function(){
            if (!$(this).attr("checked")){
                $("#SelectAll").attr("checked",false);
            }
        });
    });
});

上面的 Jquery 为全选/取消全选复选框工作 - 如果我删除下面的触发器,这将起作用

 $(document).ready(function () {
     $("#SelectAll").click(function(){
           $(".checkBoxClass").trigger("click"); 
           $(".checkBoxClass").attr('checked', true);    // if i remove this line then selectall for checkbox don't works            
     }); 
 }); 

但我需要上面的 jquery 来触发 - total_select 函数

function total_select(id,carat,price){

  var lenChkBox = $("input[name='pid[]']:checked").length;

      if(document.getElementById("pid_"+id).checked==true) {

         total_select.s++;                                  
         document.getElementById("noofs").innerHTML=total_select.s;

          total_select.c +=carat;
          var cs = (total_select.c).toFixed(2);
          document.getElementById("carat").innerHTML=cs;

          total_select.p +=price * carat;
          avg_price_per = total_select.p/total_select.c;
          var ca = (avg_price_per).toFixed(2);

          document.getElementById("price").innerHTML="$"+ca;

    } else {
            total_select.s--;
           document.getElementById("noofs").innerHTML=total_select.s;

            total_select.c -=carat;
            cs = (total_select.c).toFixed(2);
            document.getElementById("carat").innerHTML=cs;

            total_select.p -=price * carat;
            avg_price_per = total_select.p/total_select.c;
            var ca = (avg_price_per).toFixed(2);
            document.getElementById("price").innerHTML="$"+ca;
}

我尝试了很多:

   $(".checkBoxClass").attr('checked', true).triggerHandler('click');
   $(".checkBoxClass").prop('checked', true).triggerHandler('click');

但仍然无法正常工作,它会检查“SelectAll”上的所有输入并以正确的结果触发 total_select 函数,但是当我取消选择/取消选中“SelectAll”时,我的输入都不会取消选择/取消选中

p>

【问题讨论】:

    标签: javascript php jquery onclick eventtrigger


    【解决方案1】:

    您可以通过使用不显眼的事件处理程序而不是过时的on* 事件属性来解决您的问题并提高代码质量。

    首先,您可以为每个.checkBoxClass 分配其自己的change 事件处理程序,然后它可以从您放置在元素上的一些data 属性中读取元数据。

    然后可以简化全选逻辑以选中/取消选中所有这些元素,同时触发change 事件来执行处理程序。当您使用 jQuery 时,这里有一个示例:

    $('.checkBoxClass').change(function() {
      if (!this.checked)
        return;
        
      // place total_select() logic here, and read the parameters from the elements' data()
      console.log($(this).data());
    });
    
    $('#SelectAll').change(function() {
      $('.checkBoxClass').prop('checked', this.checked).change();
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="checkbox" id="SelectAll" />
    <input class="checkBoxClass" name="pid[]" id="pid_1" value="1" data-a="1" data-b="0.35" data-c="2700.00" type="checkbox">A
    <input class="checkBoxClass" name="pid[]" id="pid_2" value="2" data-a="2" data-b="0.35" data-c="2700.00" type="checkbox">B
    <input class="checkBoxClass" name="pid[]" id="pid_3" value="3" data-a="3" data-b="0.35" data-c="2700.00" type="checkbox">C

    【讨论】:

    • 取消选中 - 全选 - 函数的值应为无或空白
    • 我不明白你的意思
    • 我不能把 total_select() 逻辑放在那里,因为它被其他一些复选框 id 使用...因此我不能重复相同的功能 2 地方...其次我不能用三个值调用数据...数据-a="1" data-b="0.35" data-c="2700.00",因为这里 data-b 和 data-c 是 2 个不同的列值,而 data-a 是主要的主要 id
    • 该函数被另一个复选框使用的事实是不相关的 - 您可以从这个处理程序调用该函数(或者更好的是,将该调用也放在一个不显眼的处理程序中)。同样,您关于数据属性的观点毫无意义。如果你可以将值放在onclick调用的参数中,那么你可以将它们放在数据属性中
    • 嗨,谢谢,但不能用 $(".checkBoxClass").trigger("click"); .... 几乎都是完美的... 只是取消选中 - 全选 - 所有输入都没有取消选中
    【解决方案2】:

    我找到了如下答案,但仍有任何人有任何其他最佳解决方案让我知道,谢谢

     $(document).ready(function () {
         $("#SelectAll").click(function(){
               $(".checkBoxClass").trigger("click"); 
               $(".checkBoxClass").attr('checked', true);  
               $(".checkBoxClass").attr('checked', $(this).attr('checked')); //add this line and working proper - hope will help someone
         }); 
     }); 
    

    【讨论】:

      【解决方案3】:

      我知道这不是一个活跃的线程,但我已经卖掉了一个类似的问题,我想提出解决方案:D

      这样,只有那些复选框将被选中或取消选中,并且(因此触发)具有与 #SelectAll 不同的 checked 属性。

      $(function () {
          $('#SelectAll').click(function () {
              $('.checkBoxClass').each(function () {
                  if ($(this).prop('checked') !== $('#SelectAll').prop('checked')) {
                      $(this).trigger('click');
                  }
              });
          });
      });
      
      function total_select(id,carat,price){
        alert(id);
        }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      
      ALL
      <input type="checkbox" id="SelectAll" />
      A
      <input class="checkBoxClass" name="pid[]" id="pid_1" value="1" onclick="javascript: total_select(1,0.35,2700.00);" type="checkbox">
      B
      <input class="checkBoxClass" name="pid[]" id="pid_2" value="2" onclick="javascript: total_select(2,0.35,2700.00);" type="checkbox">
      C
      <input class="checkBoxClass" name="pid[]" id="pid_3" value="3" onclick="javascript: total_select(3,0.35,2700.00);" type="checkbox">
      
      <div id="result">
      </div>

      【讨论】:

      • 在你的答案中添加一些描述
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多