2012-04-27 2 views
1

Я пытаюсь получить идентификатор item1, но он не возвращает идентификатор в коде ниже. Есть ли способ получить идентификатор функции более высокого уровня?JQuery - Получить атрибут элемента более высокого уровня

Я предполагаю, что код пытается получить идентификатор popup, но это не необходимо и не существует. Могу ли я получить идентификатор функции более высокого уровня или могу ли я передать его нижней функции в качестве параметра?

$(".item1").live ("click" ,function(){ 
    $('.popup_pre_loading').css('display','none'); 
     $('.popup').fadeIn(800, function(){ 
     alert((this).attr('id'));//need this for URL param 
     }); 
     return false; 
}); 

Пожалуйста, обратите внимание, что этот код работает, когда окно предупреждения непосредственно в функции item «s.

+0

'.css ('дисплей', 'ни')' '=== .hide()' – noob

ответ

7

Просто сохраните ссылку на this во внешней функции и обратитесь к ней во внутренней функции.

$(".item1").live ("click" ,function() { 
    var self = this; 
    $('.popup_pre_loading').css('display','none'); 
    $('.popup').fadeIn(800, function(){ 
     alert(self.id); 
    }); 
    return false; 
}); 

Обратите внимание, что вам не нужно $(self).attr('id') - просто self.id будет делать!

2
$(".item1").live ("click" ,function(){ 
    var $item1 = $(this); 
    $('.popup_pre_loading').css('display','none'); 
    $('.popup').fadeIn(800, function(){ 
     alert((this).attr('id'));//need this for URL param 
     alert($item1.attr('id')); 
     }); 
     return false; 
}); 
+0

Это не будет работать. 'this' является ** не ** объектом jQuery, это фактический элемент DOM, поэтому вы не можете вызывать jQuery-функции на нем (вы также не должны вызывать переменную' $ item1'). Кроме того, абсолютно никакой причины использовать '.attr()' для получения идентификатора, просто используйте 'item1.id' (при условии, что вы переименуете переменную). –

+0

@ AnthonyGrist с использованием '$ var', однако, является общим соглашением использовать _when переменная is_ объект jQuery. – Alnitak

+0

Вы абсолютно правы, слишком быстро поехали на этом. Ред. –

3

Основываясь на вашем понимании, что это работает, когда она непосредственно в функцию item «s, я предполагаю, что вам это нужно в функции fadeIn. Самый простой способ сделать это - назначить его переменной в функции click и использовать эту переменную в функции fadeIn.

$(".item1").live ("click" ,function(){ 
    var item1id = $(this).attr('id'); 
    $('.popup_pre_loading').css('display','none'); 
     $('.popup').fadeIn(800, function(){ 
     alert(item1id); //need this for URL param 
     }); 
     return false; 
}); 
Смежные вопросы