Вот отбросил все что отвлекает.
;(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. |