2011-12-19 4 views
1

У меня есть страница, которая будет всплывающее fancybox с помощьюJQuery - Trigger Нажмите Внутри FancyBox

$('#showpopup').fancybox().trigger('click'); 

Это может быть вызвано выпадающее несколько раз (не сразу), когда пользователь переходит на страницу.

На всплывающем окне есть кнопка, которая вызывает действие при нажатии

$('#mybutton').click(function(){ 

    $('#otherbutton').trigger('click'); 

}); 

Когда FancyBox всплывающее окно показывает, в первый раз, когда я нажимаю #mybutton и #otherbutton будет запускать один раз.

Когда всплывающее окно fancybox показывает второй раз, я нажимаю #mybutton, а #otherbutton запускается дважды.

Когда всплывающее окно fancybox показывает третий раз, я нажимаю #mybutton, а #otherbutton трижды запускает ... и так далее.

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

ответ

2

Это звучит, как вы являетесь обязательными для обработчика click событий для #mybutton элемента в случае FancyBox (onStart, onComplete и т.д.).

Два способа исправить это, являются:

  1. На onClosed или onCleanup событий вы можете отвязать обработчик click событий для #mybutton элемента: $('#mybutton').unbind('click');. Таким образом, они не будут наращиваться и срабатывать несколько раз одним щелчком мыши.
  2. Вы можете переместить $('#mybutton').click(function(){$('#otherbutton').trigger('click');}); за пределы любого обработчика событий Fancybox (если кнопка отсутствует в DOM до тех пор, пока не появится Fancybox, вы можете использовать .delegate(), чтобы связать обработчик события click с этой кнопкой). $(document).delegate('#mybutton', 'click', function() {...}) (обратите внимание, что вы можете изменить document на любой корневой элемент, который присутствует в DOM на момент привязки).

Docs:

Я также заметил, что вы связаны со старой версией FancyBox, если вы используете 1.x, то Я предлагаю изменить на 2.0: http://fancyapps.com/fancybox/

Смежные вопросы