【问题标题】:Pass along $(this) from function to function在函数之间传递 $(this)
【发布时间】:2012-10-18 09:47:27
【问题描述】:

我希望能够声明一个可以与任何选择器或方法一起使用的函数,因此我认为可以像下面这样完成,但它不起作用!

这是为什么呢? :)

$(document).ready(function() {

    $('img').hover(function(){
        imageClass();
    });

    function imageClass() {
        var thisClass = $(this).attr('class');
        console.log(thisClass)
    }

});

【问题讨论】:

    标签: jquery function this


    【解决方案1】:

    您可以将悬停事件中的$(this) 作为argument 传递,您只需更改imageClass method to receive a parameter

    $(document).ready(function() {
    
        $('img').hover(function(){
            imageClass($(this));
        });
    
        function imageClass(obj) {
            var thisClass = obj.attr('class');
            console.log(thisClass)
        }
    
    });
    

    【讨论】:

    • $(obj) 太过分了。 obj 就够了
    • 您不需要在 imageClass 函数中再次用 $() 包装 obj,因为您已经将它作为 jQuery 对象传递了。
    • 它工作得很好 :) - 我也注意到并从 $() 解包了 obj,所以我确实对 JS 有一点了解,但还不是完整的概述 :) - 非常感谢。你能告诉我将 imageClass 函数移到 .ready 函数之外的利弊吗?
    • @afcdesign:没有任何显着差异。除了它在外面不可用 - 我不能说任何重要的。
    • .ready 在文档的所有元素都准备好并且可以访问更多关于 .ready api.jquery.com/ready 时执行,正如 zerkms 所说,你从 .ready 调用它没有显着差异
    【解决方案2】:

    你可以试试jQuery.proxy。它会让你通过this

    如果您无法弄清楚,请告诉我。

    【讨论】:

    • 在这种情况下,您甚至不需要$.proxy()imageClass.call(this); 将完成这项工作。而$.proxy() 适用于需要传递对具有预定义范围的函数的引用的情况(这里不是这种情况)。
    【解决方案3】:

    不过,这也可以:

    $('img').hover(imageClass);
    
    function imageClass() {
        var thisClass = $(this).attr('class');
        console.log(thisClass)
    }
    

    还有一个选择:

    $('img').hover(imageClass);
    
    function imageClass(e) {
        var thisClass = $(e.target).attr('class');
        console.log(thisClass)
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多