функция, непреднамеренно выполняемая при использовании .live в jQuery

#jquery #events #event-handling #dynamic #livequery

#jquery #Мероприятия #обработка событий #динамический #livequery

Вопрос:

Я пытаюсь привязать обработчик события click к некоторым элементам, которые создаются динамически. Но функция уже выполняется при простой загрузке страницы. Я также попробовал плагин livequery и .делегировать, у которого также была эта нежелательная привычка.

 $(".pika_thumb").live("click" ,( function () {
    $("#video").hide();
    $(".pika_main").show();
}));
  

Как мне предотвратить выполнение моей функции при других событиях, кроме щелчка по указанным элементам?

Комментарии:

1. Круглые скобки вокруг функции не нужны, но не должны вызывать описанную проблему. Я бы предположил, что на вашей странице есть что-то еще, вызывающее эту проблему. Попробуйте поместить оповещение внутри этой функции click и посмотреть, отображается ли оно при загрузке.

2. У меня внутри нее было предупреждение, и оно сработало.

3. Казалось, что круглые скобки действительно вызывают выполнение функции. Мне следовало более внимательно присмотреться к коду примера.

4. Очень странно. В каком браузере вы ее тестировали? Я попробовал это в chrome, просто чтобы посмотреть, и это не сработало.

5. Я тестировал Firefox 3.6.16, Chromium 10.0.630.0 и Opera до версии 11.10.

Ответ №1:

Единственная очевидная ошибка — это скобки вокруг function() { } определения.

Однако это не привело бы к немедленному вызову, если бы у вас также не был завершающий () список параметров. Завершен ли ваш фрагмент кода?

Ответ №2:

синтаксис:

 $(".pika_thumb").live("click" , function () {
    $("#video").hide();
    $(".pika_main").show();
});
  

проверьте, нет ли у вас чего-либо другого, что запускает щелчок по вашему классу .pika_thumb.

Ответ №3:

Помимо скобок, мой окончательный рабочий код:

 $("#gallery").delegate(".pika_thumb", "mousedown" , function () {
    $(".video-js").get(0).pause();
    $("#video").hide();
    $(".pika_main").show();
});
  

Спасибо всем!