我想在没有任何重定向的情况下运行一个简单的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事件)?
当前回答
除此之外,href会显示在浏览器的状态栏上,而onclick则不会。我认为在那里显示javascript代码对用户不友好。
其他回答
投票最多的答案在今天已经过时了
我建议完全相反,循序渐进地看原因:
好:
<a id="myLink" href="javascript:MyFunction();">link text</a>
这取决于,可能是好的,因为爬虫跟踪href目标,如果有任何有意义的内容产生MyFunction()(动态链接),它比在click事件中更有可能被跟踪,后者可能有多个或没有侦听器。
bad:
<a id="myLink" href="#" onclick="MyFunction();">link text</a>
#意味着没有意义的链接,爬虫通常只对前x个链接感兴趣,所以它可以阻止它们在页面后面跟踪一些有意义的链接。
更糟糕的是:
<a id="myLink" href="#" onclick="MyFunction();return false;">link text</a>
与前面加return false一样,可以防止跟随链接。如果一些其他脚本想要添加另一个侦听器并更新目标(比如通过代理重定向),他们不能不修改onclick(好吧,这只是一个小挫折,因为这样的用例相当理论化)。
坏的:
使用jQuery或其他类似的框架附加onclick处理程序的元素的ID。
$('#myLink').click(function(){ MyFunction(); return false; });
jQuery在2020+已经过时,不应该在新项目中使用。
href中的事件
href属性处理程序没有得到事件对象,因此处理程序不会隐式地看到哪个链接是源。你可以在onclick处理程序中添加它,它会在href之后触发:
<a href="javascript:my_function(event2)" onclick="event2=event">
JS based link
</a>
<script>
function my_function(e) {
console.log(e.target); // the source of the click
if(something) location.href = ...; // dynamic link
}
</script>
就我个人而言,我觉得把javascript调用放在HREF标签中很烦人。我通常不太注意某些东西是不是javascript链接,而且经常想在一个新窗口中打开东西。当我尝试这样做与这些类型的链接之一,我得到一个空白页面上什么都没有和javascript在我的位置栏。但是,通过使用onlick可以避免这一点。
在任何不是专门用于脚本的属性中使用javascript:都是一种过时的HTML方法。虽然从技术上讲它是可行的,但您仍然将javascript属性分配给非脚本属性,这不是一个好的实践。它甚至可以在旧的浏览器上失败,甚至在一些现代的浏览器上(一个谷歌论坛的帖子似乎表明Opera不喜欢'javascript:' url)。
更好的做法是第二种方式,将javascript放到onclick属性中,如果没有可用的脚本功能,则忽略该属性。在href字段中放置一个有效的URL(通常是'#'),以供那些没有javascript的人使用。
编辑警告:请参阅评论,在这个答案中使用“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: hrefs不能工作时,页面嵌入到Outlook的网页功能,其中一个邮件文件夹被设置为显示url