У меня есть скрипт, и он столкнулся с некоторыми проблемами:
(function($) {
$.fn.extend({
iH: function() {
$(document).on('mouseenter', this, function(e) {
alert('this is the element');
})
}
})
})(jQuery);
тогда в теле:
$(function(){
$('.elem').iH();
});
<div class="elem">element</div>
Я создал скрипку ЗДЕСЬ
В принципе, есть идеи, как сделать фактический элемент this
элементом this
в функции обратного вызова?
Кроме того, я не хочу использовать .live()
или .delegate()
, поскольку они устарели.
EDIT:
Причина, по которой я пытаюсь это сделать, заключается в том, что я пытаюсь связать элементы, которые, возможно, еще не существуют в DOM, т.е. я могу сделать это:
(function($) {
$.fn.extend({
iH: function() {
$(this).on('mouseenter', function(e) {
alert('this is the element');
})
$(this).live('mouseenter', function(e) {
alert('Depreciated LIVE function');
})
}
})
})(jQuery);
однако он не сработает ни для каких элементов, добавленных после привязки события, но .live()
сработает:
$('body').append($('<div />').addClass('elem').html('content'));
$('.elem').iH();
$('body').append($('<div />').addClass('elem').html('content'));
Как я уже сказал, .live()
устарел, поэтому я стараюсь его не использовать.
обновленная скрипка ЗДЕСЬ
РАЗЪЯСНЕНИЕ НА БУДУЩУЮ ССЫЛКУ
Поскольку был дан (правильный) ответ, выяснилось, что проблема была в том, что я передавал объект jQuery функции. После дальнейшего изучения я обнаружил, что вы действительно можете использовать переменную this
внутри функции, чтобы указать на затронутый элемент (ы):
$.fn.extend({
iH: function() {
$(document).on('mouseenter', this.selector, function(e) {
alert($(this).html());
});
}
})
$('.elem').iH();
$('body').append('<div class="elem">Value</div>')
Демонстрация: jsFiddle # 3