3

これは私のテストコードです:

describe("Login", function(){
    beforeEach(function(){
        loadFixtures('login-fixture.html');
    })

    it("should enable the button when checking 'remember password'", function(){
        $('#remember').trigger('click');
        expect($('#keepIn')).not.toBeDisabled();
    });
});

そしてこれは私のプロダクションコードです:

$(document).ready(function(){

    $('#remember').click(function(e) {
        if($('#remember').is(':checked'))
        {
            $('#keepIn').removeAttr('disabled');
        }
    });

});

これは機能していません。本番コードが呼び出されることはありません。トリガーイベントの前後とトリガーの後にチェックボックスがオンになっているアラートを配置しましたが、.click関数が呼び出されません。

なぜこれが起こっているのかについて何か考えはありますか?

4

1 に答える 1

6

コードの残りの部分を見ずに、「login-fixture.html」に「#remember」チェックボックスが含まれていると想定しています。その場合、DOMがロードされた後にロードされます。つまり、割り当てたい「クリック」イベントは、以前にロードされた要素にのみ適用されます。jQuery on()イベントは、新しくロードされた要素に必要なイベントを割り当てます。そのIDにon()イベントを追加してみてください。何かのようなもの:

$(function(){
    $('#remember').on('click', function(){
        if($('#remember').is(':checked')){
            $('#keepIn').checkboxradio('enable');
        }
    });
});

お役に立てば幸いです。

参照:http ://api.jquery.com/on/

于 2012-06-25T15:24:22.923 に答える