2

これが私のコードです。2つのチェックボックスがあり、もう1つが有効になるまで1つを無効にしたい:

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

問題は、この関数がデフォルト アクションの前に実行され、最初のアクションをクリックする$('#remember').is(':checked')と true ではなく false (古い値) が返されることです。

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メソッドは非推奨です。onまたはを使用することをお勧めしますdelegate

jQuery の新しいバージョンの場合、解決策は次のようになります。

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

の代わりに、body任意の親要素を使用できます#remember

于 2012-06-26T10:07:46.567 に答える