Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Паттерн плагина jQuery (https://javascript.ru/forum/jquery/35576-pattern-plagina-jquery.html)

prison47 17.02.2013 00:51

Вот как-то так.
<script src="//code.jquery.com/jquery-latest.min.js"></script>
<script>

;(function($) {

    $.fn.pluginName = function( settings ) {
    	var settings = $.extend( {
    	 }, settings);
     return this.each(function() {
     	var element = $(this);
   $('.foo').click(function(){

    	     	alert($(this));
    });

}); 
};

}) (jQuery) ;
</script>
<style>
.foo{
width:100px;
height:100px;
background: #000;

}
</style>
<button onclick="$(this).pluginName()">Нажми </button>
<button onclick="$(this).pluginName()">Нажми 2</button>
<div class='foo'></div>

рони 17.02.2013 01:11

Цитата:

Сообщение от prison47
вживую клацать

http://javascript.ru/formatting

рони 17.02.2013 01:30

prison47,
<!DOCTYPE HTML>

<html>

<head>
  <title></title>
<meta charset="utf-8" />
<style type="text/css">
#general_overlay{
  background-color: #FF0099;
   width: 300px;
   height: 50px;
}
</style>
</head>

<body>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>

(function($) {

    $.fn.pluginName = function( settings ) {

    	var settings = $.extend( {

    	 }, settings);

     return this.each(function() {

     	var element = $(this);
    if($('#general_overlay').length)  {alert('No pasarán'); return} ;
	if(!$('#general_overlay').length){

		$("<div id='general_overlay'></div>").appendTo($('body'));
	};

	var genOverlay = $('#general_overlay');

    element.click( function(){

    	genOverlay.show();

    });

    $('body').on('click.overPop', '#general_overlay', function(){

    	$(this).hide();

    	       //	console.log($(this));
    });

});
};

}) (jQuery) ;
</script>

<button onclick="$(this).pluginName()">Нажми </button>

<button onclick="$(this).pluginName()">Нажми 2</button>

</body>

</html>

prison47 17.02.2013 01:40

Спасибо за оформление, вот получается если произвожу клик на диве overlay он удаляется а в консоле this проходит два раза.

А в этом коде не могу разобраться, я незнаю значение переменных , например D
options = options || {};
		index   = options.index || 0;
		if (!selector || options.live === false) {
			that.unbind('click.fb-start').bind('click.fb-start', run);
		} else {
			D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
		}
		this.filter('[data-fancybox-start=1]').trigger('click');
		return this;

рони 17.02.2013 01:54

Цитата:

Сообщение от prison47
this проходит два раза.

сейчас пост 23 это не так

рони 17.02.2013 01:58

prison47,
лучше скажите как вы хотите чтоб это работало

prison47 17.02.2013 02:06

Понимаете у меня "плагин" он вешается например на кнопку. При клике на кнопку в конец бади добавляется див оверлей с display:none. Потом добавляется еще один див с определенной информацией он позиционирован в угол браузера. Кликаем на этот див с информацией он позиционируется в центр экрана а див оверелей появляется dispaly:block и затемняет экран. По принципе как в лайт боксах. Потом кликаем один раз на див оверлей он скрывается а второй див удаляется. Так вот клик на скрытие оверлея я вешаю через on(). Если вешать плагин на один элемент на странице (кнопку) то все ок, если на два то обработчик on() срабатывает 2 раза!

Точнее в конец бади оверлей добавляется сразу. А див с информацией при нажатии

рони 17.02.2013 02:15

prison47, извините но пока из ваших попыток в который раз обьяснить что вы хотите , я в который раз ничего непонял, может вам не плагин нужен?

рони 17.02.2013 02:24

Цитата:

Сообщение от prison47
Потом добавляется еще один див

Цитата:

Сообщение от prison47
А див с информацией при нажатии

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

рони 17.02.2013 02:29

prison47,
или сделали так
if(!$('#general_overlay').length){

		$("<div id='general_overlay'></div>").appendTo($('body'));

      $('body').on('click.overPop', '#general_overlay', function(){

    	$(this).hide();

    	       console.log($(this));
    });



    };


Часовой пояс GMT +3, время: 09:05.