Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery-我的函数获取了错误DOM对象的引用_Jquery_Dom_Reference - Fatal编程技术网

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');
          });
      }
    });