jQuery-我的函数获取了错误DOM对象的引用
我创建了自己的悬停函数,可以更改文本的不透明度。看起来是这样的:jQuery-我的函数获取了错误DOM对象的引用,jquery,dom,reference,Jquery,Dom,Reference,我创建了自己的悬停函数,可以更改文本的不透明度。看起来是这样的: jQuery.fn.menuHover = function () { var object = this; $(object).css({'opacity':'0.2'}); $(document).delegate(object, 'mouseenter', function() { $(object)
jQuery.fn.menuHover = function ()
{
var object = this;
$(object).css({'opacity':'0.2'});
$(document).delegate(object, 'mouseenter', function() {
$(object)
.stop()
.animate({opacity: 1}, 'slow');
});
$(document).delegate(object, 'mouseleave', function() {
$(object)
.stop()
.animate({opacity: 0.2}, 'slow');
});
};
然后我调用这个函数:
<script type="text/javascript">
$(document).ready(function() {
$('.menu_text').menuHover();
});
</script>
$(文档).ready(函数(){
$('.menu_text').menuHover();
});
它可以很好地工作,但它只能处理整个文档,而只能处理“.menu\u text”类。我的意思是变量'this'==document而不是'.menu\u text'。问题是如何将其更改为仅对所选对象运行?应该注意的是,现在有几个版本的.delegate()
已被.on()
取代
这不是向jQuery对象添加新方法的推荐方法($()
)。推荐的方法是
$.fn.extend({
menuHover: function() {
// ...
}
});
但这更像是吹毛求疵
我猜想,问题在于将jQuery对象作为其第一个参数传递给.delegate()
。指定第一个参数应为(签名1)字符串、(签名2)字符串或(签名3)字符串-可能发生的情况是jQuery向非字符串举手,并将处理程序应用于$(文档)
。这与我在没有选择器的情况下使用$(document).on()时发生的情况相匹配。另一种可能的解释(在测试过程中显示)是,在处理程序中使用对象(也称为选择器匹配的所有内容)将立即使所有内容褪色
以下应该可以工作(在JSFIDLE中测试):
说明:
扩展jQuery对象的函数已经将所讨论的对象设置为this
。.on()
方法执行将this
设置为原始DOM节点的处理程序,因此我们必须在使用jQuery方法之前对其调用$
我已经删除了委托方法,只是将该方法应用于所传递的所有内容。这应该不是问题
var对象
完全没有必要在中使用此
。.on()
(事实上,使用对象
产生了错误的结果);我刚刚调用了这个
上的方法
我的意思是我不想使用默认的jqueryhover,因为我的函数得到了更好的效果。我只是想改进我的代码,抱歉误解了。
$.fn.extend({
menuHover: function() {
this
.css({opacity: '0.2'})
.on('mouseenter', function () {
$(this).stop().animate({opacity: 1}, 'slow');
})
.on('mouseleave', function () {
$(this).stop().animate({opacity: 0.2}, 'slow');
});
}
});