【问题标题】:jQuery click event on checkbox not working复选框上的jQuery单击事件不起作用
【发布时间】:2012-08-12 00:41:13
【问题描述】:

我正在尝试使用以下代码。我想要的是如果选中复选框,则显示具有“生成器”类的表行,如果未选中(默认)则将其删除。我已经测试了 jquery,我知道它加载正常,所以这不是问题。

以下是我尝试改编自jQuery checkbox event handling的代码:

<script>
$('#gen_form input:checkbox').click(function() {
    var $this = $(this);
    // $this will contain a reference to the checkbox   
    if ($this.is(':checked')) {
        $(".generator").toggle();
    } else {
        $(".generator").toggle();
    }
});
</script>


      <?php if(isset($msg)){ echo "<span id='msg'>".$msg."</span>"; }?>
      <h2>Add CLLI</h2>
      <form method="post" id='gen_form'>
        <table class="form_table_newuser">
         <tr>
          <td class='tdl'>Generator</td><td class='tdr'><input type='checkbox' id='showGen' name='generator' /></td><td>&nbsp;</td>
         </tr>
         <tr class='generator'>
          <td class='tdl'>Start Time</td><td class='tdr'><input type='text' name='start_time' class='textbox'/></td><td>&nbsp;<span class='error'>*<?php echo $errors['start_time']; ?></span></td>
         </tr>
         <tr class='generator'>
          <td class='tdl'>End Time</td><td class='tdr'><input type='text' name='end_time' class='textbox'/></td><td>&nbsp;<span class='error'>*<?php echo $errors['end_time']; ?></span></td>
         </tr>

我对 jQuery 还是很陌生,并且正在学习。我用复选框检查尝试的一切都失败了。我可以使用一个按钮并且它可以工作(使用不同的代码),但我需要能够使用该复选框。在发布之前我尝试了更多的事情,说他们都处理复选框,但点击复选框时他们都没有做任何事情。

【问题讨论】:

  • 看这段代码,没有错。您可能没有包含 $(function 或 $(document).ready(function() 调用,或者您没有包含库。
  • 控制台日志中是否有任何错误?
  • 这是您的代码:jsfiddle.net/j2YdH 似乎有效?
  • 是的,它工作正常 Scott,检查控制台,还在控制台中快速$.fn.jQuery 看看你是否拥有 jQuery 的版本和版本
  • :checkbox 已弃用 api.jquery.com/category/deprecated.. 你现在应该改用 [type='checkbox'].. 你的复选框还有一个 ID 所以用它来选择它

标签: jquery


【解决方案1】:

试着把你的代码放在$(document).ready处理程序中,根据你的标记结构,听起来你只想选择一个输入元素,试试下面:

$(document).ready(function(){
  $('#showGen').change(function(){
      $('.generator').css('display', this.checked ? 'block' : 'none');
      // or $('.generator').toggle()
  })
})

【讨论】:

    【解决方案2】:

    这是因为 dom 没有准备好,你的脚本在元素存在之前运行。

    如果你把你的脚本包装在 jQuery 的文档中,这样它就可以工作了:-

    $(function(){
      $('#gen_form input:checkbox').click(function() {
        var $this = $(this);
        // $this will contain a reference to the checkbox   
        if ($this.is(':checked')) {
          $(".generator").toggle();
        } else {
          $(".generator").toggle();
        }
      });
    });
    

    我在 jsFiddle 中尝试过,效果很好

    【讨论】:

    • 确实如此,我没有 -1 你,但我会 +1 你至少把它还给你。谢谢!
    【解决方案3】:

    您需要将函数包装在文档就绪回调中,否则在绑定处理程序时元素不存在:

    $(document).ready(function() {
        $('#gen_form input:checkbox').click(function() {
            $(".generator").toggle(); // simplifies to this
        });
    });
    

    另外,jQuery .toggle() 为您交替处理隐藏/显示。

    【讨论】:

    • 您应该在切换按钮内传递一个条件,以确保它应该处于哪个状态......例如。 $(".generator").toggle(this.checked)真意秀..假意隐藏
    • 显示我缺少的内容(准备好文档)并简化了它。非常感谢!
    • @wirey 这不应该是必要的,因为大概每次点击都会改变复选框是否被选中(即切换其状态),并调用.toggle() 简单地没有参数切换元素的可见性(jq docs)。事实上,.change() 将比.click() 更好地实现此目的,但在这种情况下它应该无关紧要。所以第一次点击隐藏,下一次点击显示等等。
    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多