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

时间:2012-06-26 10:06:47

标签: javascript jquery

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

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

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

1 个答案:

答案 0 :(得分:4)

您可以改为使用change事件:

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

DEMO: http://jsfiddle.net/jP3NY/


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

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

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

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