Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   $(this) в теле плагина (https://javascript.ru/forum/jquery/35400-%24-v-tele-plagina.html)

рони 10.02.2013 22:43

Цитата:

Сообщение от prison47
кликаем на .box появляется див .too. А вот теперь я хочу повесить обработчик на див .too например .hide(). То есть при нажатии на .too он исчезает.

Не вижу проблемы ...
<!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>

не вижу проблемы

prison47 10.02.2013 23:59

Ничего не понимаю почему тогда у меня не работает как надо:
(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);

Может тут я что-то пропустил?

рони 11.02.2013 00:25

prison47,
строка 20 там нет $(this) у вас.

prison47 11.02.2013 00:26

Как нет я же в 7 строке определил var $this = $(this);

рони 11.02.2013 00:40

prison47,
так значение переменной и есть в 20 строке а по новой this никто определять небудет

prison47 11.02.2013 00:47

Спасибо большое так заработало но я не совсем понял, почему именно $this не приняло $(this). Если не сложно не могли бы вы объяснить ?

рони 11.02.2013 01:02

prison47,
var $this = $(this);
эта строка равна для примера var $this = $('.box').eq(0);
$this.hide(); тогда станет $('.box').eq(0).hide(); может кто доходчивее обьяснит.
http://learn.javascript.ru/this

prison47 11.02.2013 01:23

Теперь кажется я понял. БОЛЬШОЕ вам спасибо:)

prison47 13.02.2013 06:16

Эх появилась еще одна дилемма. Помогите пожалуйста разобраться. Делаю плагин появления окон уведомления. Так вот появление этих окон вешаю на кнопку с определенным атрибутом, все работает. Добавляю в документ еще одну кнопку, тоже все работает. Но теперь $(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 Получается двойное срабатывание. Как то это можно обойти?

prison47 13.02.2013 07:18

Попробовал в таком случае обращаться до
return this.each(function() {

И все заработало как надо.
Но такое ощущение что это не правильно.


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