jQuery .click() 在自定义函数之前执行默认动作

Posted

技术标签:

【中文标题】jQuery .click() 在自定义函数之前执行默认动作【英文标题】:jQuery .click() perform the default action before the custom function 【发布时间】:2012-06-26 10:06:47 【问题描述】:

这是我的代码,我有两个复选框,并希望保持一个禁用状态,直到另一个启用:

$(function()
    $('#remember').live('click', function(event)
        if($('#remember').is(':checked'))
            $('#keepIn').removeAttr('disabled');
        
        else
            $('#keepIn').attr('disabled', 'disabled');
    );
);

问题是这个函数在默认操作之前执行,当我点击第一个$('#remember').is(':checked')返回false(旧值)而不是true。

【问题讨论】:

【参考方案1】:

您可以改用change 事件:

$('#remember').live('change', function(event) 
    if (this.checked) 
        $('#keepIn').removeAttr('disabled');
     else 
        $('#keepIn').attr('disabled', 'disabled');
    
);

演示: http://jsfiddle.net/jP3NY/


注意: live 方法已弃用。您最好使用ondelegate

对于较新版本的 jQuery,解决方案可能如下:

$('body').on('change', '#remember', function(event) 
    $('#keepIn').prop('disabled', !this.checked);
);

您可以使用#remember 的任何父元素来代替body

【讨论】:

只需 2 美分 bruv 请使用 .on 而不是 .live :) 谢谢,解决了,我会尽可能接受答案。 @Tats_innit 在 live vs on issue 上,我试过了,但 .on 方法对我不起作用,请参阅这个问题:***.com/questions/11191966/… @Tats_innit 我们不知道使用的是什么版本的 jQuery ;) @VisioN 确实很重要,但我强烈建议任何人获取最新版本 :) 否则人们会错过很多精彩 :) @Tats_innit 我忘了,我用的是 1.7.2

以上是关于jQuery .click() 在自定义函数之前执行默认动作的主要内容,如果未能解决你的问题,请参考以下文章

在自定义控件中,有CheckBox控件,当触发OnCheckedChanged事件时

jQuery 在自定义插件上实现销毁方法

jQuery同一标签多个相同事件 return语句 表单提交实例

在 jquery click() 之后调用定义的函数不起作用

使用 click() 在 jQuery 中调用函数

jQuery 1.5.2 - 使用 click() 函数的非常奇怪的行为