2

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

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

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

4

1 回答 1

4

您可以改用change事件:

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

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


注意: live方法已弃用。你最好使用onor delegate

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

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

body可以使用#remember.

于 2012-06-26T10:07:46.567 回答