2012-02-23 3 views
1

У меня есть элемент внутри карусели и привязан к событию .click(). И он отлично работает, потому что этот элемент находится на первой странице карусели и видимо справа при загрузке.jQuery .click() на предмете внутри карусели

Но если я переведу карусель, чтобы она стала невидимой, а затем вернулась в область просмотра, событие click() больше не работает?

Возможно, мне просто нужно как-то зарегистрировать его, когда он будет виден?

BTW Нажмите используется, чтобы открыть модальное JQuery UI диалоговое

Благодаря

+0

Как мы можем помочь вам найти ошибки в коде, который мы не видим? Отправьте код в свой вопрос и/или создайте [jsfiddle] (http: //www..jsfiddle.net) –

+0

http://www.elveneleven.com/WhyGo/ Извините, я думал, что это может быть просто вопрос «перерегистрировать событие клика на карусели, перемещаемого», или что-то общее, как это было бы хорошо ... Хотя точный код также был бы классным;) – Zoran

+0

Вы говорите о диалоговом окне, которое открывается при нажатии на «Получить краткую цитату»? Работает для меня все время, независимо от того, что я делаю (возьмите тур, поиграйте с аккордеон ...) –

ответ

0

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

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

Подход к решению этого вопроса заключается в использовании делегирования событий.
В основном вы будете делегировать выполнение нажатием на .quickQoute в контейнере, в вашем случае карусельной элемент #inner:

$('#inner').on('click', '.quickQoute', function() { 
    $("#quickQoute").dialog({ closeText: ' ' }); 
    $("#quickQoute").dialog("open"); 
    return false; 
}); 

Подробнее о делегировании событий с .on()

+0

Это просто великолепно! Мне нравится каждый день изучать новые вещи. Элегантный, объяснительный и полезный. Отличная работа и спасибо! – Zoran

0

Я предлагаю использовать liveQuery plugin

Это автоматически привяжет события к элементам при их создании. Например:

$(".some_appearing_button").livequery('click',function() { 

     alert("You clicked me!"); 
}); 

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

+0

livequery больше не имеет значения: jQuery реализует * изначально * событие делегирование с 1.3 ... –

+0

livequery - это совершенно другая концепция из .live(), если это то, что вы имеете в виду. Else, пожалуйста, уточните :) – Flater

+0

Didier, я получаю, что привязка его к событию клика может быть изменена на делегат/на функционал, но есть некоторые вещи, которые эти функции все еще не могут сделать. Например, в приложении, которое я сделал, я добавил класс 'datepicker' в текстовые поля, которые нуждались в atepicker. В этом классе LiveQuery был инициирован, и он автоматически очищал ввод текстового поля. Я не мог заставить это работать с on/delegate, потому что они работают с событиями, но нет события item_is_created. Следовательно, livequery. В этих сценариях все еще есть хорошие привычки. – Flater