Javascript.RU

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

$(this) в теле плагина
Помогите пожалуйста разобраться. Есть тело плагина. В html он вызывается на определенном элементе, допустим див с классом box. Соответственно если в плагине обращаться так $(this) нас приведет на див с классом box. А вот в чем проблема: а например хочу найти див с классом too, и на нем вызвать функцию. Например:
$('.too').click(function(){

$(this).действие;

});

Так вот проблема в том что и внутри функции $(this) вызывает класс box. Так вот как мне повесить действия на этот элемент на котором вызван click.
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2013, 05:04
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

<script type="text/javascript">

$(window).load(function(){

$(".box").plugin(


	);
});
</script>

<div class="box">Click</div> // нажимаем получаем действие, например добавляем в DOM еще один див с классом too при клике на котором он же и закроется.

$('.too').click(function(){

$(this).hide(); // но хайд естественно не сработает потому как this возвратит див с классом бокс

});
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2013, 05:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Внутри обработчика собития this ссылается на элемент, в котором возникло событие, то есть на .too

<button class="too">Клик ми</button>
<script src="//code.jquery.com/jquery-latest.min.js"></script>
<script>
    $('.too').click(function(e){
        alert( this.className );
    });
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2013, 06:10
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

То что this возвращает это я знаю. Но дело в том что возвращает его как объект, тоесть так уже не получится сделать this.hide();
Ответить с цитированием
  #5 (permalink)  
Старый 10.02.2013, 06:25
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

this ссылается на чистый DOM-элемент.
Если нужны плюшки из jquery-обертки, просто оборачиваем его в нее:
$(this).hide(). Это же так просто.

<button class="too">Клик ми</button>
<script src="//code.jquery.com/jquery-latest.min.js"></script>
<script>
    $('.too').click(function(e){
        $(this).hide();
    });
</script>
Ответить с цитированием
  #6 (permalink)  
Старый 10.02.2013, 06:30
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Да но вы забыли что мы все это делаем в теле плагина, а там $(this) выдаст .box
Ответить с цитированием
  #7 (permalink)  
Старый 10.02.2013, 07:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

$('.too').click(fn) регистрирует функцию fn в качестве обработчика события click. При наступлении события click, jQuery вызывает данную функцию, устанавливая в качестве контекста dom-элемент, на котором сработало событие.
И не имеет значения где эта функция находится. Хоть на луне.
В примере выше обработчик регистрировали в глобальном контексте, тоесть window, тем не менее this внутри обработчика не указывает на window, верно?

Другой пример:

<button class="too">Клик ми</button>
<script src="//code.jquery.com/jquery-latest.min.js"></script>
<script>
    (function(){
        alert (this);

        $('.too').click(function(e){
            $(this).hide();
        });

    // вызываем, устанавливая контекстом строку 'Луна'
    }).call('Луна');
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 10.02.2013, 16:54
Аспирант
Отправить личное сообщение для prison47 Посмотреть профиль Найти все сообщения от prison47
 
Регистрация: 03.12.2012
Сообщений: 54

Да получается я вызываю плагин на .box и в теле плагина $(this) всегда возвращает мне тот элемент на котором был вызван плагин.
Ответить с цитированием
  #9 (permalink)  
Старый 10.02.2013, 17:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

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

Я разбираюсь с созданием плагина. Вот например я хочу вызвать появление дива .too при нажатии на .box. Подключаю плагин на .box
<script type="text/javascript">

$(window).load(function(){

$(".box").plugin(

    );

});

</script>

Все работает, кликаем на .box появляется див .too. А вот теперь я хочу повесить обработчик на див .too например .hide(). То есть при нажатии на .too он исчезает. Но ничего естественно не получается так $(this) даже внутри функции обработчика возвращает тот дом элемент на котором был вызван плагин, тоесть .box

Последний раз редактировалось prison47, 10.02.2013 в 21:36.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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