繁体   English   中英

是否有通过锚标记的参数调用JavaScript的最佳实践?

[英]Is there a best practice for calling JavaScript with parameters from an anchor tag?

我已阅读以下问题

Javascript和锚标记,最佳做法?

似乎建议解决方案如下

<a id="foo" href="#">Click Me</a>

document.getElementByID("foo").onclick = function() { alert("hi"); }

但是,假设我有一堆链接,它们都用不同的参数调用同一函数。 我快速而又肮脏的解决方案是生成类似以下内容的东西

<a href="#" onClick="myFunction('1001');return false">Click Me 1</a>
<a href="#" onClick="myFunction('1002');return false">Click Me 2</a>
<a href="#" onClick="myFunction('1003');return false">Click Me 3</a>

有没有办法使侦听器解决方案适应参数?

您可以在有问题的每个元素上使用以下行的data属性:

<a href="#" id="foo" data-id="1000">Click Me 1</a>​

并使用以下回调:

document.getElementById("foo").onclick = function() { 
    alert(this.getAttribute('data-id'));
}​

这里是小提琴形式。

不过,更好的选择可能是使用jQuery处理事情。 假设上面的链接格式如下所示:

$('#foo').click(function(){
  alert($(this).attr('data-id'));
});

您可以使用委派。

<div id='links'>
<a href="#" class="link" data-param1='1000' data-param2='something'>click</a>
<a href="#" class="link" data-param1='1001' data-param2='something'>click</a>
<a href="#" class="link" data-param1='1002' data-param2='something'>click</a>
</div>
<script type='text/javascript'>
$links = document.getElementById("links");

$links.onclick=function(e){
  element = e.target;
  if(element.tagName="a" && element.getAttribute("class")=="link"){
    console.log(element.getAttribute("data-param1"))
    console.log(element.getAttribute("data-param2"));
  }
  return false;
}
</script>

请注意,当您使用HTML编写如下代码时:

<a href="#" id="foo" onClick="myFunction('1001');return false">Click Me 1</a>

在JS中完全相同:

document.getElementById("foo").onclick = function(event) {
    myFunction('1001');
    return false;
}

解析器找到事件属性后,它将以完全相同的方式创建一个匿名函数。

暂无
暂无

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

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