Вот отбросил все что отвлекает.
;(function($) { $.fn.homerTwice = function( settings ) { var settings = $.extend( { }, settings); return this.each(function() { var element = $(this); if(!$('#general_overlay').length){ // проверяем если данного дива нет на странице то добавляем его, в стилях дисплей none $("<div id='general_overlay'></div>").appendTo($('body')); }; var genOverlay = $('#general_overlay'); element.click( function(){ genOverlay.show(); // кликаем по кнопке, наш див #general_overlay появляется }); $('body').on('click.overPop', '#general_overlay', function(){ // кликаем на диве #general_overlay он исчезает $(this).hide(); console.log($(this)); // если плагин вешается например на две кнопки ( $('#btn_1').homerTwice(); $('#btn_2').homerTwice(); ), то происходит двойное срабатывание нажатия }); }); // this each close }; }) (jQuery) ; |
prison47,
$('body').on тогда надо ставить в конец 15 строки |
Да действительность оказалось настолько очевидным :-?
СПАСИБО ПРЕОГРОМНОЕ!!! |
А как быть если мы вешаем обработчик на изменения окна браузера?
$(window).off('resize.noteResize').on('resize.noteResize', function(){ console.log($(this)); }); В консоль this записывается два раза (при условие что плагин подключен дважды). Если использовать без .off('resize.noteResize') тогда this записывается 4 раза. Пробовал через .data() решить проблему. Тоесть повесить проверку если .data() у windows не существует то повесить обработчик и записать для windows .data(). Но все равно дублирует. В чем я сделал ошибку? if(! $.hasData(window) ){ $(window).data('foo'); $(window).on('resize.noteResize', function(){ console.log($(this)); }); }; А вот если подключить плагин 3 раза или 1 раз, this записывается все равно 2 раза. Я так понял это все таки не двойное навешивание обработчика. |
Цитата:
resize => 1.обнулили таймер 2. поставили таймер 3. таймер сработал сделал всё что нужно. resize это серия event -- надо/желательно дождаться последнего. |
Часовой пояс GMT +3, время: 01:03. |