【问题标题】:How do I refer "this" keyword to another function on callback?如何在回调中将“this”关键字引用到另一个函数?
【发布时间】:2013-07-31 02:24:40
【问题描述】:

我正在尝试创建对 click 方法的回调函数的引用。我希望this 引用被点击的href。我该怎么做呢?我已经阅读了有关使用 .call 方法的信息,但对我来说并不是 100% 清楚..

下面是我正在处理的代码 sn-p。我在遇到问题的地方留下了评论。

var scrollTo = {
    init: function(config) {
        var href = config.element;

        href.on('click', this.scroll);

    },

    scroll: function(e) {
        var target = this.attr('href'), // I would like "this" to refer to the href.onClick element
            sT = $(target).offset().top;

            console.log(this);
            $('html, body').animate({
                scrollTop: sT
            }, 2000);

            e.preventDefault();

    }

}

scrollTo.init({
    element: $('a[href^="#"]')
});

【问题讨论】:

  • this 指向触发事件的元素....您希望它指向哪个对象
  • 我想让this指向被点击的href元素(可以在init函数中找到)
  • 它指向那个元素
  • 对!我的错。我只需要写$(this).attr 而不是this.attr。感谢您的帮助,4 分钟后我可以点击绿色复选标记 :)

标签: javascript jquery call


【解决方案1】:

你需要使用$(this),因为在回调函数中this指向dom元素而不是jQuery包装元素,因此它没有.attr()方法

var target = $(this).attr('href')

演示:Fiddle

【讨论】:

    【解决方案2】:

    由于您使用的是 jQuery,也许使用 jQuery.proxy() method 可以提供帮助?它从现有函数引用新函数并重新定义被调用函数中的“this”(上下文)。

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 2022-06-17
      相关资源
      最近更新 更多