Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.02.2013, 22:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от 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>

не вижу проблемы
Ответить с цитированием
  #12 (permalink)  
Старый 10.02.2013, 23:59
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

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

Может тут я что-то пропустил?
Ответить с цитированием
  #13 (permalink)  
Старый 11.02.2013, 00:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

prison47,
строка 20 там нет $(this) у вас.
Ответить с цитированием
  #14 (permalink)  
Старый 11.02.2013, 00:26
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Как нет я же в 7 строке определил var $this = $(this);
Ответить с цитированием
  #15 (permalink)  
Старый 11.02.2013, 00:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

prison47,
так значение переменной и есть в 20 строке а по новой this никто определять небудет
Ответить с цитированием
  #16 (permalink)  
Старый 11.02.2013, 00:47
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Спасибо большое так заработало но я не совсем понял, почему именно $this не приняло $(this). Если не сложно не могли бы вы объяснить ?
Ответить с цитированием
  #17 (permalink)  
Старый 11.02.2013, 01:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

prison47,
var $this = $(this);
эта строка равна для примера var $this = $('.box').eq(0);
$this.hide(); тогда станет $('.box').eq(0).hide(); может кто доходчивее обьяснит.
http://learn.javascript.ru/this
Ответить с цитированием
  #18 (permalink)  
Старый 11.02.2013, 01:23
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Теперь кажется я понял. БОЛЬШОЕ вам спасибо
Ответить с цитированием
  #19 (permalink)  
Старый 13.02.2013, 06:16
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Эх появилась еще одна дилемма. Помогите пожалуйста разобраться. Делаю плагин появления окон уведомления. Так вот появление этих окон вешаю на кнопку с определенным атрибутом, все работает. Добавляю в документ еще одну кнопку, тоже все работает. Но теперь $(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 Получается двойное срабатывание. Как то это можно обойти?
Ответить с цитированием
  #20 (permalink)  
Старый 13.02.2013, 07:18
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
public метод для плагина Ichigeki jQuery 1 16.02.2012 19:07
Использование $(this) внутри функции Dorian_bs Общие вопросы Javascript 6 21.11.2011 11:10
$(this) выборка Kuklavod jQuery 4 01.11.2011 20:15
Не срабатывает при отсутствии в теле документа yuriii jQuery 3 06.05.2010 17:45
$(this) обращение к выборкам цикла jei jQuery 1 16.09.2009 14:44