Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 17.02.2013, 02:45
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Вот отбросил все что отвлекает.
;(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) ;
Ответить с цитированием
  #32 (permalink)  
Старый 17.02.2013, 02:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

prison47,
$('body').on тогда надо ставить в конец 15 строки
Ответить с цитированием
  #33 (permalink)  
Старый 17.02.2013, 03:05
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Да действительность оказалось настолько очевидным
СПАСИБО ПРЕОГРОМНОЕ!!!
Ответить с цитированием
  #34 (permalink)  
Старый 17.02.2013, 05:58
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

А как быть если мы вешаем обработчик на изменения окна браузера?
$(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 раза. Я так понял это все таки не двойное навешивание обработчика.

Последний раз редактировалось prison47, 17.02.2013 в 06:53.
Ответить с цитированием
  #35 (permalink)  
Старый 17.02.2013, 09:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от prison47
вешаем обработчик на изменения окна браузера
надо ставить таймер на 100-500ms;
resize =>
1.обнулили таймер
2. поставили таймер
3. таймер сработал сделал всё что нужно.
resize это серия event -- надо/желательно дождаться последнего.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу инвайт на хабр macdack Оффтопик 45 28.07.2013 23:18
Вопрос поддержки старых методов jQuery antonM jQuery 1 04.10.2012 00:08
Вызов подметода плагина jQuery antonM jQuery 5 25.06.2012 12:44
Внешняя ссылка на страницу которая находится в IFRAME Модального окна плагина jQuery Андррр jQuery 0 07.12.2011 15:13
Поиск плагина выводящего подсказки к ссылкам, jQuery. Flashton Элементы интерфейса 6 04.03.2010 20:47