【问题标题】:Unable to trigger checkbox change无法触发复选框更改
【发布时间】:2013-07-08 02:14:21
【问题描述】:

我正在使用 jQuery 1.8.3。我想触发每个复选框的状态变化。

当我把它放在点击事件中时,这段代码就可以工作了:

$("#btn_off").click(function(){
   $( "tr td input" ).each(function( index ) 
   {
    if ($(this).is(":checked"))
    {
       //some code
    }
   });
});

但是当我使用这段代码时它不是:

$('tr td input').live('change', function(){ 
    if(this.checked)
    {
       //something
    }
});

然后我尝试过:

$('tr td input').on('change', function(){ 
    if(this.checked)
    {
       //something
    }
});

并带有以下内容:

$('tr td :checkbox').change(function() { 
    if(this.checked)
    {
       //something
    }
});

我做错了什么?此代码位于.ready() 这是网站上唯一的复选框,所以我确信 selector 应该可以工作...

【问题讨论】:

  • 我认为你应该在最后三种情况下使用 $(this).is(":checked"),而不是 this.checked
  • @JonasGrumann 我不这么认为
  • 你能在 jsfiddle 中分享你的代码吗

标签: javascript jquery events jquery-selectors jquery-events


【解决方案1】:

你需要检查属性检查

$('input').on('change',function(){
    if($(this).prop('checked'))
        alert('checked');
    else
        alert('unchecked');
});

查看demo

【讨论】:

  • 还要检查你是否使用 On jquery 版本应该是 1.7 或更高,因为 live 从 1.7 开始被弃用
【解决方案2】:
$(document).ready(function(){
    $('body').delegate('td input:checkbox','click',function() { 
        if($(this).is(':checked'))
        {
           alert("Checked");
        }
    });
});

【讨论】:

    【解决方案3】:

    这有帮助吗?:http://jsfiddle.net/msapD/3/

    $(document).ready(function(){
        $('tr td input').change(function() { 
            if(this.checked)
            {
               alert("Checked");
            }
        });
    });
    

    【讨论】:

    • 我摆出的 jsfiddle 与我摆出的作品一起工作。那么一定有某种格式问题或冲突。你能把你的工作放在一个jsfiddle中吗?我不介意再看一遍。
    【解决方案4】:

    试试这个,你必须使用 $(this).is(':checked') 而不是 this.checked

    HTML

    <table>
        <tr>
            <td><input type="checkbox"/> </td>
        </tr>
        <tr>
            <td><input type="checkbox"/> </td>
        </tr>
        <tr>
            <td><input type="checkbox"/> </td>
        </tr>
    </table>
    

    JS

    $(document).ready(function() {
        $('tr td input[type="checkbox"]').on('change', function(){
            if($(this).is(':checked'))
                alert('checked');
            else
                alert('not checked');
        });
    });
    

    小提琴:http://jsfiddle.net/nuxbox/vxyHq/

    【讨论】:

    • 我知道这应该可以工作,但它不是......什么都没有被触发。
    • 您的意思是您没有看到弹出的警报?
    • 你能发布更多代码吗?也许你的 javascript 上的某个地方给出了错误,因此导致警报没有触发
    【解决方案5】:

    你可以使用click事件:

    $('tr td input').on("click", function() {
        if ($(this).is(':checked')) {
    
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2013-03-09
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多