【问题标题】:how to pass $(this) object from one function to another?如何将 $(this) 对象从一个函数传递到另一个函数?
【发布时间】:2013-03-15 06:30:45
【问题描述】:

我认为它是非常基本的面向对象的 JavaScript 相关问题。但我仍然对此感到非常困惑。我想将 $(this) 对象从 1 个函数传递给另一个函数。这样我就可以获得点击链接的href attr。

这是我的示例代码

HTML

<a href="#testblah" class="test" rel="image">TEST</a>
<a href="#blahtest" class="test" rel="video">TEST</a>

JS

$(document).on("click", ".test", function () {

var $this = $(this);
var rel = $this.attr("rel");

if (rel == "image") {
    e.preventDefault();
    openImage($this);
} else if (rel == "video") {
    openVideo($this);
}
});

function openImage($this) {

var href =  $this.attr("href");
alert(href);
}

【问题讨论】:

  • 如果您让事件处理程序接受e 参数,您的代码可以正常工作:jsfiddle.net/6zAN7/19
  • 是的,你是绝对正确的@AndrewWhitaker! 无赖 我犯了一个愚蠢的错误!只是征求意见是上述代码的最佳实践吗?我的意思是我定义了一个名为 $this 的变量,然后使用相同的名称在其他函数中调用该对象?我应该使用不同的名称吗?或者根本不重要!谢谢..
  • 我会将变量命名为更有意义的名称,例如 linkanchor$this 不是很具描述性。不过从技术上讲,这并不重要。
  • 不能再同意了。 $this 是一个非常糟糕的名字,尤其是 $ 本来就没有必要在变量名中使用。
  • tadman,最好将 $ 粘贴在包含 jquery 对象的任何变量的开头。只是您可以跟踪哪些变量可以调用 jquery 函数,哪些不能。

标签: javascript jquery oop object


【解决方案1】:

查看 jQuery 文档page 中的示例。您会发现 on 方法适用于所选元素,就您的代码而言,它是 document 对象。要获得您想要的属性,jQuery 不需要包装元素。这是一个 JSBin example。还有一件事,尝试用 === 替换 == 来进行类型检查。希望对你有帮助

【讨论】:

    【解决方案2】:

    我的问题有 1 个小语法错误(请查看问题的第一条评论)

    以下是我最终使用的代码。

    $(document).on("click", ".test", function (e) {
    
        var anchor = $(this);
        var rel = anchor.attr("rel");
    
        if (rel == "image") {
            e.preventDefault();
            openImage(anchor);
        } else if (rel == "video") {
            openVideo(anchor);
        }
        });
    
        function openImage(anchor) {
        var href =  anchor.attr("href");
        alert(href);
        }
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多