setTimeOut с функцией JQuery .live () - PullRequest
1 голос
/ 18 января 2012

У меня есть это:

function toggle() {
    $('#clbttn').fadeOut('fast');
    $('#msg').fadeOut('fast');
    setTimeout(function() { $('#msg').remove(); $('#clbttn').remove(); }, 200);
}
$('#clbttn').live('click', toggle());

И в результате у меня это: Uncaught TypeError: У объекта #clbttn нет метода 'apply'

Кто-нибудь знает, что мне делать?

Ответы [ 3 ]

4 голосов
/ 18 января 2012

вы должны изменить toggle() на toggle, так как первый - это вызов функции.

$('#clbttn').live('click', toggle);
1 голос
/ 18 января 2012

Как сказал Джейсон, live устарела и должна быть заменена на on.Но, не , просто сделайте это:

$('#clbttn').on('click', toggle);

Это не будет работать с динамически добавляемым контентом, поскольку не будет устанавливать делегированный обработчик событий.Выше было бы эквивалентно

$('#clbttn').bind('click', toggle);

Чтобы использовать on с динамически добавленным контентом, вы хотите:

$(document).on('click', '#clbttn', toggle);

Это скажет jQuery прослушивать все клики, всплывающие докорень документа и запуск функции переключения, когда щелчок происходит от элемента с идентификатором clbttn.Если вы знаете, что этот элемент будет когда-либо только в, скажем, div с id foo, вы могли бы более эффективно написать это как

$("#foo").on('click', '#clbttn', toggle);
0 голосов
/ 18 января 2012

live устарел, jquery рекомендует использовать на

Начиная с jQuery 1.7, метод .live () устарел. Используйте .on () для прикрепить обработчики событий. Пользователи старых версий jQuery должны использовать .delegate () предпочтительнее .live ().

Этот метод предоставляет средство для прикрепления делегированных обработчиков событий к элемент документа страницы, который упрощает использование обработчиков событий когда контент динамически добавляется на страницу. Смотрите обсуждение прямые и делегированные события в методе .on () для более информация.

...