我想在没有任何重定向的情况下运行一个简单的JavaScript函数。
把JavaScript调用放在href属性中(像这样)有什么区别或好处吗?
<a href="javascript:my_function();window.print();">....</a>
与把它放在onclick属性(绑定到onclick事件)?
我想在没有任何重定向的情况下运行一个简单的JavaScript函数。
把JavaScript调用放在href属性中(像这样)有什么区别或好处吗?
<a href="javascript:my_function();window.print();">....</a>
与把它放在onclick属性(绑定到onclick事件)?
当前回答
编辑警告:请参阅评论,在这个答案中使用“nohref”是不正确的。
我使用
Click <a nohref style="cursor:pointer;color:blue;text-decoration:underline"
onClick="alert('Hello World')">HERE</a>
虽然绕了很长一段路,但还是完成了任务。使用A风格来简化 然后就变成:
<style> A {cursor:pointer;color:blue;text-decoration:underline; } </style>
<a nohref onClick="alert('Hello World')">HERE</a>
其他回答
在javascript中使用“href”时,我还注意到一件事:
如果两次点击之间的时间差很短,“href”属性中的脚本将不会被执行。
例如,尝试运行下面的示例并双击每个链接(快!)。 第一个链接将只执行一次。 第二个链接将执行两次。
<script>
function myFunc() {
var s = 0;
for (var i=0; i<100000; i++) {
s+=i;
}
console.log(s);
}
</script>
<a href="javascript:myFunc()">href</a>
<a href="#" onclick="javascript:myFunc()">onclick</a>
在Chrome(双击)和IE11(三次点击)中复制。 在Chrome中,如果你点击足够快,你可以点击10次,只有一个功能执行。
Firefox运行正常。
除此之外,href会显示在浏览器的状态栏上,而onclick则不会。我认为在那里显示javascript代码对用户不友好。
最好的方法是:
<a href="#" onclick="someFunction(e)"></a>
问题是这将在浏览器中添加一个散列(#)到页面URL的末尾,从而要求用户单击返回按钮两次才能进入您的页面之前的页面。考虑到这一点,您需要添加一些代码来停止事件传播。大多数javascript工具包已经有了这个函数。例如,dojo工具包使用
dojo.stopEvent(event);
这样做
就我个人而言,我觉得把javascript调用放在HREF标签中很烦人。我通常不太注意某些东西是不是javascript链接,而且经常想在一个新窗口中打开东西。当我尝试这样做与这些类型的链接之一,我得到一个空白页面上什么都没有和javascript在我的位置栏。但是,通过使用onlick可以避免这一点。
将onclick放在href中会冒犯那些坚信内容与行为/动作分离的人。争论的焦点是你的html内容应该只关注内容,而不是表现形式或行为。
现在的典型路径是使用javascript库(例如。Jquery),并使用该库创建一个事件处理程序。它看起来像这样:
$('a').click( function(e) {e.preventDefault(); /*your_code_here;*/ return false; } );