【问题标题】:Best way of calling a JavaScript function through an href attribute [duplicate]通过 href 属性调用 JavaScript 函数的最佳方法 [重复]
【发布时间】:2016-10-03 07:09:55
【问题描述】:

我有以下代码:

 <a href="javascript: doSomeFunction();">Click here</a>

在 Chrome 中它运行良好,但在其他浏览器中,如 Opera、Firefox 等,它什么也不做,打开一个几乎空白的页面,并显示消息 "Object object" 或类似的东西。

如果我将上面的 href 调用更改为

<a href="#" onClick="doSomeFunction();">Click here</a>

它在所有浏览器中都能正常工作,但页面会移到顶部(滚动条)。

第三种解决方案:

 <a href="javascript:void(0);" onClick="doSomeFunction();">Click here</a>

适用于所有浏览器。

不过,我还是在野外找到了这个建议:

<a href="javascript: doSomeFunction(); void(0);">Click here</a>

与上面类似,但不需要 onClick 事件。

为什么是最好的方法?为什么?

【问题讨论】:

  • 不推荐将javascript: 放入href。在 onClick 中使用return false; 来取消导航。

标签: javascript onclick href void


【解决方案1】:

普遍的共识是使用 href="#" 优于 "javascript:void(0);"由于 "javascript:" 不会优雅地降级,因此应尽可能避免使用它们。

最好的解决方案是您的第二个解决方案:
&lt;a href="#" onClick="doSomeFunction();"&gt;Click here&lt;/a&gt;

要解决点击时滚动到顶部的问题,只需将其更改为:
&lt;a href="#" onClick="doSomeFunction(event);"&gt;Click here&lt;/a&gt;(添加事件参数)并执行 event.preventDefault();在你的函数中。

所以代码应该是这样的:

<a href="#" onClick="doSomeFunction(event);">Click here</a>

<script>
function doSomeFunction(event){
    // Do stuff

    event.preventDefault();
}
</script>

【讨论】:

  • 从 HTML5 开始,您可以简单地省略 href="#" - 滚动到顶部无论如何都不是优雅的降级。你应该有一个真正的链接/锚点,或者根本没有。
猜你喜欢
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2014-05-30
  • 2014-08-24
  • 2015-06-01
  • 2013-06-03
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多