Триггер jQuery («щелчок») не работает с Jasmine-jquery

Это мой тестовый код:

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 не вызывается.

Любые мысли о том, почему это происходит?


person mornaner    schedule 25.06.2012    source источник
comment
Откуда взялась эта штука .checkboxradio?   -  person Pointy    schedule 25.06.2012
comment
какие ошибки вылетают в консоль?   -  person charlietfl    schedule 25.06.2012
comment
@Pointy Это мобильный jQuery. В любом случае, я изменил код, чтобы сделать это только с помощью jQuery.   -  person mornaner    schedule 25.06.2012
comment
@charlietfl В консоли нет ошибок, просто тест не проходит. Я видел, что это не называется отладкой с помощью firebug.   -  person mornaner    schedule 25.06.2012


Ответы (1)


Не видя остального кода, я предполагаю, что «login-fixture.html» содержит флажок «#remember». Если это так, он загружается после загрузки DOM. Это означает, что событие «щелчок», которое вы хотите назначить, будет применяться только к ранее загруженным элементам. Событие jQuery on() назначит любое событие, которое вы хотите, новым загруженным элементам. Возможно, вы захотите попробовать добавить событие on() к этому идентификатору. Что-то типа:

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

Надеюсь, это поможет.

См.: http://api.jquery.com/on/.

person JCSickmeyer    schedule 25.06.2012
comment
Правильный. Спасибо @OptimusCrime - person JCSickmeyer; 25.06.2012
comment
@OptimusCrime: метод .on вызывает ту же проблему, в то время как метод .live у меня работает нормально (я использую последнюю версию jQuery) - person mornaner; 26.06.2012
comment
Это действительно странно. live указывает только на включение функции в последней версии, насколько мне известно. - person OptimusCrime; 26.06.2012
comment
Да, спасибо, я искал это уже несколько недель! .live работал у меня, когда .on и .delegate не работали. - person Rebekah Waterbury; 03.10.2012
comment
Но что я действительно хотел бы сделать, так это изменить среду тестирования, чтобы она загружала мои фикстуры, прежде чем запускать функции, которые должны выполняться в Document.ready. - person Rebekah Waterbury; 03.10.2012
comment
@mornaner, насколько я понимаю, .live работает, поскольку всегда всплывает до самого документа и, следовательно, работает. С помощью метода .on вы должны указать, как далеко он пузырится. Я считаю, что это основная причина, по которой .live устаревает. - person spirytus; 26.02.2014
comment
Это все еще не работает для меня. Я попробовал это на консоли Chrome, и это работает. Я просто обновляю класс div по клику. Отлично работает на хромированной консоли, но не работает с жасминовым jquery. - person Sandip Subedi; 21.08.2017