0
function removeSelection(button) {
    $('#a').bind('click', function() {
        if($(button).hasClass('checked')) { 
            alert("a");
            $(this).find('input:checkbox').attr('checked', 'false');
            $(button).removeClass("checked");
        }
        else {
            alert("b");
            $(this).find('input:checkbox').attr('checked', 'checked');
            $(button).addClass("checked");
        }
    }); 
}

行動:

first click - Alert('b')
second click  Alert('a') Alert('b')
third click   Alert('a') Alert('b') Alert('a')

何をすべきか:

first click - Alert('b')
second click  Alert('a') 
third click   Alert('b') 

何が問題ですか?

4

2 に答える 2

3

jQuery 1.9 を使用している場合は、 attr( )の代わりにprop()を使用します。チェックとチェック解除には true と false を使用します。

function removeSelection(button) {
    $('#a').bind('click', function() {
        if($(button).hasClass('checked')) { 
            alert("a");
            $(this).find('input:checkbox').prop('checked', false);
            $(button).removeClass("checked");
        }
        else {
            alert("b");
            $(this).find('input:checkbox').prop('checked', true);
            $(button).addClass("checked");
        }
    }); 
}

ただし、checked 属性について覚えておくべき最も重要な概念は、checked プロパティに対応していないということです。この属性は実際には defaultChecked プロパティに対応し、チェックボックスの初期値を設定するためにのみ使用する必要があります。checked 属性値はチェックボックスの状態によって変化しませんが、checked プロパティは変化します。したがって、チェックボックスがチェックされているかどうかを判断するクロスブラウザー互換の方法は、プロパティReferenceを使用することです。

于 2013-04-30T14:49:21.683 に答える