【问题标题】:How to call jQuery function when checkbox is checked by PHP?PHP选中复选框时如何调用jQuery函数?
【发布时间】:2013-06-21 18:44:06
【问题描述】:

这是我的 PHP 代码:

<?php if (isset($mod['display']) && ($mod['display'] == "1")) { ?>
    <input class="display_checkbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" checked="checked" onclick="checkbox_click(this);" />
<?php } else { ?>
    <input class="display_checkbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" onclick="checkbox_click(this);" />
<?php } ?>

jQuery:

function checkbox_click(current) {
  if($(current).is(':checked')) {
          // do stuff....
  } else {
          // do stuff....
  }
}

在上面的代码中,当$mod['display'] 为真时,复选框被选中但它不调用checkbox_click() 函数。我尝试了onchange= 而不是onclick=,但它似乎没有任何效果。我需要在字段中保留onclick 或onchange。

【问题讨论】:

    标签: php jquery checkbox


    【解决方案1】:

    尝试为此使用prop函数, 另外你不需要调用函数,你可以使用jquery.on()这样的函数来创建它,

    $(function(){
       $(document).on('click','.display_checkbox',function(){
          if($(this).prop('checked')) {
                  // do stuff....
          } else {
                  // do stuff....
          }
       });
    });
    

    然后从您的html checkbox element 中删除onclick="checkbox_click(this);"

    更新

    在document ready上初始化它

    $(function(){
       $('.display_checkbox').each(function(){
          if($(this).prop('checked')) {
                  // do stuff....
          } else {
                  // do stuff....
          }
       });
    });
    

    阅读on()和prop()

    【讨论】:

    • 不,它仍然无法达到我的目的。它与我原来的功能做同样的事情。当 PHP 选中复选框时,它不会调用该函数。只有当我手动单击复选框时它才会调用该函数。
    • No 仍然似乎对 PHP 选择没有任何影响。
    • 这现在似乎适用于 PHP 选择,但是当我手动单击复选框时它现在失败了 - 与我的初始代码发生的情况完全相反。为了解决这个问题,如果我保留我的原始函数加上 onclick=... 并包含您的上述代码,它可以完美运行,但这会在页面中添加冗余代码。
    • 是的,我想是的。我已经用对我有用的方法更新了上面的答案。谢谢你的帮助!!
    【解决方案2】:

    试试这个:

    <?php if (isset($mod['display']) && ($mod['display'] == "1")) { ?>
        <input class="display_checkbox selectedcheckbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" checked="checked" onclick="checkbox_click(this);" />
    <?php } else { ?>
        <input class="display_checkbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" onclick="checkbox_click(this);" />
    <?php } ?>
    

    jQuery:

    $(document).ready(function(){
       var obj = $(".selectedcheckbox");
       var found = obj.length;
       if(found == 1)
       {
         checkbox_click(obj);
       }
    });
    
    function checkbox_click(current) {
      if($(current).is(':checked')) {
          // do stuff....
      } else {
          // do stuff....
      }
    }
    

    【讨论】:

      【解决方案3】:

      如果您希望函数在页面加载后执行,并且在每次复选框状态更改时执行,您应该这样做:

      <?php if (isset($mod['display']) && ($mod['display'] == "1")) { ?>
          <input class="display_checkbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" checked="checked" onclick="checkbox_click(this);" />
      <?php } else { ?>
          <input class="display_checkbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" onclick="checkbox_click(this);" />
      <?php } ?>
      

      在脚本中:

      function checkbox_click(current) {
        if($(current).is(':checked')) {
                // do stuff....
        } else {
                // do stuff....
        }
      }
      
      $(function(){
         $('.display_checkbox').each(function(){
            checkbox_click($(this));
         });
      });
      

      另外,我不会那样做。在这种情况下,您应该使用 onchange 事件绑定。

      我认为的最佳解决方案是:

      <input class="display_checkbox" type="checkbox" name="chk[<?php echo $row; ?>][display]" value="1" <?php if (isset($mod['display']) && ($mod['display'] == "1")) { ?>checked="checked"<?php } ?> />
      

      javascript 应该是这样的:

      $(function(){
         $('.display_checkbox').change(function(){
            if($(this).is(':checked')) {
                // do stuff....
            } else {
                // do stuff....
            }
         });
      
         $('.display_checkbox').each(function(){
            $(this).change();
         });
      });
      

      【讨论】:

        猜你喜欢
        • 2019-08-11
        • 2018-09-25
        • 1970-01-01
        • 2018-11-04
        • 2015-07-28
        • 2016-09-08
        • 2017-05-09
        • 1970-01-01
        • 2016-04-05
        相关资源
        最近更新 更多