jquery: live () - живет только один раз?

Я следую этому потоку, чтобы отключить/включить нажатие кнопки, Лучший способ удалить обработчик событий в jQuery?

его идея заключается в том, что вы также можете использовать метод live() для включения/отключения событий. Что произойдет с этим кодом, так это то, что когда вы нажмете на элемент тега, например, .load-item, он добавит отключенный класс к этому элементу. Это приведет к тому, что селектор больше не будет соответствовать элементу, и событие не будет запущено до тех пор, пока не будет удален класс «отключен», что сделает селектор .live() снова действительным.

Ниже то, что у меня получилось, и оно отключает нажатие на первую кнопку,

$('.load-item:not(.disabled)').live('click',function(){


/* add a .current class to the target item */
$(this).parentsUntil('.column-global').addClass('current');

/* add .disabled class to each a tag in the .current element-div */
$('.current a').each(function(index) {
    $(this).addClass('disabled');
});

....

});

и у меня есть еще одна функция для удаления отключенного класса при нажатии на другую кнопку,

$('.button-return').click(function(){

    ...

    /* remove all the .disabled class if any exists */
    $('.current a').each(function(index) {
        $(this).removeClass('disabled');
    });

    ...

    /* remove all the .current class if any exists */
    $('.item-global').removeClass('current');



    return false;

});

Я проверил, что он удаляет класс disabled, но первая кнопка все еще не возвращается в исходное состояние, доступное для нажатия.

я что-то пропустил - или live() на самом деле живет только один раз? любые лучшие решения, если live() не тот, над которым я должен работать ??

Спасибо.


person laukok    schedule 04.11.2010    source источник


Ответы (2)


Ваша кнопка возврата также должна быть живым событием.

$('.button-return:not(disabled)').live("click",function(){...});

Также при использовании addClass() и removeClass() вам не нужно использовать каждый из них в селекторе. Просто позвони.

$('.current a').each(function(index) {
    $(this).removeClass('disabled');
});

такое же, как это

$('.current a').removeClass('disabled');

Отредактировано

Обратите внимание, что при добавлении живого события к кнопке возврата необходимо убедиться, что оно не отключено.

Это прекрасно работает, вот простая демонстрация http://www.jsfiddle.сеть/Qax3n/

person John Hartsock    schedule 04.11.2010
comment
Почему .button-return должно быть в прямом эфире? Я не вижу, чтобы этот класс динамически манипулировался где-либо... - person Nick Craver; 04.11.2010
comment
попробовал, но все равно не работает после добавления live() в .button-return. спасибо за removeClass(). - person laukok; 04.11.2010
comment
@lauthiamkok ... Протестировал основные функции и создал демо. базовая демо работает отлично. Попробуйте. - person John Hartsock; 04.11.2010
comment
да базовая демо работает отлично! до сих пор не понимаю, что не так в моем коде! Спасибо за это. я собираюсь попробовать :-) - person laukok; 04.11.2010
comment
Я узнал, в чем моя проблема - у меня есть эта строка после использования load(), $('.disabled').click(function(){return false;}); если я не использую эту строку, страница "вернет true" - перейти на другую страницу, взяв ссылку с кнопки тега - ‹a href=›button 1 ‹/a›... любая идея, как я могу решить это...? - person laukok; 04.11.2010
comment
мое единственное решение — добавить onclick=return false; к каждому тегу a. но потому что это совсем не элегантно. ничего себе спасибо! - person laukok; 04.11.2010
comment
вот весь код jquery, если вы не знаете, что я имел в виду выше, jsfiddle.net/9v4Yd/ 1 :-) - person laukok; 04.11.2010
comment
Попробуйте click(function(event){event.preventDefault();}); - person methodin; 04.11.2010

Это должно иметь какое-то отношение к вашему макету HTML или другому Javascript. Следующие работы: http://jsfiddle.net/EEJEh/

person methodin    schedule 04.11.2010