Любая причина, почему этот .click не работает - PullRequest
2 голосов
/ 14 сентября 2010

У меня есть страница , у меня запущено вращение слайд-шоу.У меня он сейчас меняется каждую секунду для тестирования.Слайд-шоу работает отлично, но по какой-то причине его остановить нелегко.У меня есть ссылка сверху, которая должна его остановить.

<a class="stop" href="#">Stop to play the video</a>

$('.stop').click(function(){
   $('#slideshow').cycle('stop');
});

Это должно остановить скрипт, но это не так.Но если вы откроете firebug и вставите эту строку в консоль, скрипт остановится.Что дает?

   $('#slideshow').cycle('stop');

Ответы [ 4 ]

5 голосов
/ 14 сентября 2010

Только что присмотрелся к вашему коду, и вы испускаете JavaScript вне ваших обработчиков $(document).ready(...) и перед элементом в html, поэтому вы пытаетесь прикрепить событие к несуществующему элементу.

Либо переместите свой обработчик кликов внутри $(document).ready(...), либо поместите его под ссылкой в ​​html.

2 голосов
/ 14 сентября 2010

Вместо этого используйте методы $.live() или $.delegate() - они будут привязаны ко всем текущим и будущим элементам, соответствующим селектору.

http://api.jquery.com/live/

http://api.jquery.com/delegate/

2 голосов
/ 14 сентября 2010

Это может быть проблема синхронизации, при загрузке страницы я получаю это сообщение в FireBug:

[cycle] terminating; zero elements found by selector
[cycle] terminating; too few slides: 1
[cycle] terminating; zero elements found by selector
[cycle] terminating; zero elements found by selector
[cycle] terminating; zero elements found by selector
[cycle] terminating; zero elements found by selector

Однако, если я выполню следующий код после загрузки страницы, ссылка работает правильно.

$('.stop').click(function(){
$('#slideshow').cycle('stop');
});
0 голосов
/ 14 сентября 2010

есть ли у вас более одного элемента, к которому был добавлен класс «стоп», в этом случае вы можете столкнуться с проблемой. Если это так, вы можете попробовать следующее:

$('a.stop').click(function(){
   $('#slideshow').cycle('stop');
});

если у вас есть более одной ссылки с остановкой класса, тогда, если вы хотите связать каждую из них, вы должны сделать что-то вроде этого

$('a.stop').each(function(){
$(this).each("click",function(){
   $('#slideshow').cycle('stop');
});
});

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

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

...