Цитата:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <style type="text/css"> .too{ display: none; } </style> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $.fn.plugin = function () { return this.each(function (index, self) { $(this).click(function (e) { $('.too').show(); }); $('.too').click(function (e) { $(this).hide(); }); }) } </script> <script type="text/javascript"> $(window).load(function(){ $(".box").plugin(); }); </script> <title></title> </head> <body> <button class="box">is box</button> <div class="too">is too</div> </body> </html> не вижу проблемы |
Ничего не понимаю почему тогда у меня не работает как надо:
(function($) { $.fn.plugin2 = function(options) { return this.each(function() { var $this = $(this); var setting = $.extend({ }, options); $this.click(function(){ $('.too').show(); }); $('.too').click(function(e){ $this.hide(); }); }); }; }) (jQuery); Может тут я что-то пропустил? |
prison47,
строка 20 там нет $(this) у вас. |
Как нет я же в 7 строке определил var $this = $(this);
|
prison47,
так значение переменной и есть в 20 строке а по новой this никто определять небудет |
Спасибо большое так заработало но я не совсем понял, почему именно $this не приняло $(this). Если не сложно не могли бы вы объяснить ?
|
prison47,
var $this = $(this); эта строка равна для примера var $this = $('.box').eq(0); $this.hide(); тогда станет $('.box').eq(0).hide(); может кто доходчивее обьяснит. http://learn.javascript.ru/this |
Теперь кажется я понял. БОЛЬШОЕ вам спасибо:)
|
Эх появилась еще одна дилемма. Помогите пожалуйста разобраться. Делаю плагин появления окон уведомления. Так вот появление этих окон вешаю на кнопку с определенным атрибутом, все работает. Добавляю в документ еще одну кнопку, тоже все работает. Но теперь $(this) уже дублирует элементы. То есть например стоит обработчик нажатия на кнопку, нажимаем, появляется окно(див) в него добавляется ново созданный див тоже с обработчиком клика. Так вот теперь новый див реагирует на this в двойне. То есть плагин как бы вызывается два раза. И не получается например повесить на него условие с проверкой такого плана:
if(!$(this).attr('data-toggle') || $(this).attr('data-toggle') == 'off'){ $(this).attr('data-toggle','on'); $(this).parent('[data-case]').css('height', ptopHeight).addClass('clear-p'); } else if ($(this).attr('data-toggle') == 'on'){ $(this).attr('data-toggle','off'); $(this).parent('[data-case]').css({'height': '200px', 'visibility': 'visible'}); }; Пo умолчание data-toggle стоит off Получается двойное срабатывание. Как то это можно обойти? |
Попробовал в таком случае обращаться до
return this.each(function() { И все заработало как надо. Но такое ощущение что это не правильно. |
Часовой пояс GMT +3, время: 03:42. |