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() 事件会将您想要的任何事件分配给新加载的元素。您可能想尝试将 on() 事件添加到该 ID。就像是:

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

希望有帮助。

见:http ://api.jquery.com/on/

于 2012-06-25T15:24:22.923 回答