繁体   English   中英

如何将对象传递给来自JavaScript的href函数

[英]How to pass the object to function call from javascript as href

使用内联事件作为属性,我可以使用this关键字将当前对象传递给函数。 如何使用Javascript作为href调用它。

以下示例清除了问题:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
<script>
function foo(ob){
  alert(ob.innerText);
}
</script>
</head>
<body>
   <a href="#" onclick="foo(this)">On Click Call</a> Works Fine!
   <br />
   <br />
   <a href="javascript:foo(this)">Javascript linked</a> Does not work.
</body>
</html>

查看此演示

通常,出于可维护性等原因,最好避免将JavaScript直接放入href属性。 所以我不推荐这种方法。 但是,如果由于某些原因您确实需要走这条路线...

当JavaScript是通过调用href属性的值, thiswindow 要获得被点击的元素,一种解决方案(有点笨拙)是为其分配一个id属性,您可以使用该属性来选择它。

<a id="js-linked" href="javascript:foo(document.getElementById('js-linked'));">Javascript linked</a>

如您所见,这有点难以理解。 使用onclick属性,因为使事情变得更清洁,更容易维护this被赋予单击元素的值。 完全避免使用内联JS并在隔离的代码中附加click侦听器可能会使事情更清洁,更可维护。

通常最好使用Unobstrusive Javascript的原则,而不要完全在HTML中放置事件处理程序。

当你再使用.addEventListener()来安装你的事件处理程序,价值this会为您自动设置到导致该事件的对象。

这是如何工作的:

!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
   <a href="#" id="call">On Click Call</a> Works Fine!
<script>
document.getElementById("call").addEventListener("click", function(e) {
    e.preventDefault();
    alert(this.textContent);
});
</script>
</body>
</html>

所做的更改:

  1. <script>标记移至内容之后,以便在脚本运行时已加载DOM元素。
  2. 向目标链接添加唯一的ID值
  3. 使用document.getElementById()获取目标链接对象
  4. 将事件处理程序移出HTML并移至脚本中,然后使用.addEventListener()添加事件处理程序。
  5. 使用this来引用事件处理程序中单击的链接。

javascript:foo(this) this是指Window对象。 使用javascript伪协议时,您没有对clicked元素的引用,因此将无法使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM