href 与 onclick 中的 JavaScript 函数

IT技术 javascript href
2021-02-03 02:05:22

我想在没有任何重定向的情况下单击运行一个简单的 JavaScript 函数。

将 JavaScript 调用放在href属性中是否有任何区别或好处(如下所示:

<a href="javascript:my_function();window.print();">....</a>

) 与将它放在onclick属性中(将其绑定到onclick事件)?

6个回答

坏的:

<a id="myLink" href="javascript:MyFunction();">link text</a>

好的:

<a id="myLink" href="#" onclick="MyFunction();">link text</a>

更好的:

<a id="myLink" href="#" onclick="MyFunction();return false;">link text</a>

更好的1:

<a id="myLink" title="Click to do something"
 href="#" onclick="MyFunction();return false;">link text</a>

更好的2:

<a id="myLink" title="Click to do something"
 href="PleaseEnableJavascript.html" onclick="MyFunction();return false;">link text</a>

为什么更好?因为return false会阻止浏览器点击链接

最好的:

使用 jQuery 或其他类似框架通过元素的 ID 附加 onclick 处理程序。

$('#myLink').click(function(){ MyFunction(); return false; });
如果我告诉你第一个(坏的)一个在所有浏览器中以相同(正确)的方式使用中间点击怎么办。
2021-03-18 02:05:22
但是,为什么不好?为什么好 ?为什么更好?为什么更好1?为什么更好 2?为什么最好?如果它有效,它就有效。
2021-03-21 02:05:22
只是我不起眼的 5 美分:“最好”的选择是使用按钮进行点击(onclick 事件?),并将锚点与它们的 href 保持在最初的设计意图:成为指向其他页面的链接的锚点。
2021-03-22 02:05:22
<a id="myLink" href="javascript:MyFunction();"> 有什么不好?
2021-04-07 02:05:22
将有另一种解决方案,该解决方案最好href不要设置#为 noJS 浏览器的实际链接。
2021-04-09 02:05:22

将 onclick 放在 href 中会冒犯那些坚信将内容与行为/行动分开的人。争论是你的 html 内容应该只关注内容,而不是表现或行为。

现在的典型路径是使用 javascript 库(例如 jquery)并使用该库创建事件处理程序。它看起来像:

$('a').click( function(e) {e.preventDefault(); /*your_code_here;*/ return false; } );
有一次我提倡将函数调用内联而不是为链接设置一个 onclick 事件是如果您在页面内动态创建链接,这些链接都将调用相同的函数,但可能没有唯一的 id。我有一个网络表单,用户可以在其中添加和删除项目,我将 onclick 放在动态创建的 div 中链接的 href 中,这样我就可以更快地开始处理脚本,而不是使用诸如相对 id 或class名称。
2021-03-12 02:05:22
如果您不必对事件对象执行任何操作,那么纯 javascript 非常简单。用obj = document.getElementById()获取DOM节点,然后设置obj.onclick = foo
2021-03-15 02:05:22
当 <a href> 动态生成时,例如在弹出窗口中,内容的分离怎么样,并且您仍然需要特殊的点击行为?
2021-03-25 02:05:22
但是问题不是问将 JS 调用内联放入href与内联放入之间的区别onclick吗?假设您出于某种原因要将其内联,您应该使用哪个?(实际上,我会按照您的建议进行操作,但您似乎跳过了这两个属性之间的区别。)
2021-04-05 02:05:22
或者 mootools、prototype、dojo ......或者简单的 javascript,但这将是更多的代码,但值得练习。
2021-04-06 02:05:22

在方面的javascript,一个区别是,this在关键字onclick处理程序将参考DOM元素,其onclick属性是(在这种情况下,<a>元件),而thishref属性将参考window对象。

表示而言,如果href链接中没有属性(即<a onclick="[...]">),则默认情况下,浏览器将显示text光标(而不是经常需要的pointer光标),因为它将<a>视为锚点,而不是链接。

行为方面,当通过导航通过 指定操作时href,浏览器通常支持href使用快捷方式或上下文菜单在单独的窗口中打开该操作仅通过 指定操作时这是不可能的onclick


但是,如果您要问从 DOM 对象的单击中获得动态操作的最佳方法是什么,那么使用与文档内容分开的 javascript 附加事件是最好的方法。您可以通过多种方式做到这一点。一种常见的方法是使用 jQuery 之类的 javascript 库来绑定事件:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<a id="link" href="http://example.com/action">link text</a>
<script type="text/javascript">
    $('a#link').click(function(){ /* ... action ... */ })
</script>
感谢您确认我的怀疑,即“href”与“onclick”中的“this”不同。
2021-03-26 02:05:22

我用

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>
nohrefarea标签的一部分,而不是a你的例子是一样的<a onClick="alert('Hello World')">HERE</a>
2021-03-11 02:05:22
+1 真的很棒!:-) 我以前从未听说过nohref属性。这是处理此类 javascript 操作的最合乎逻辑/优雅的方式。这与 FF12 和 IE8 兼容。因此,我将替换我所有href="JavaScript:void(0);"nohref. 非常感谢。干杯。
2021-03-12 02:05:22
只是另一个“不要做这个警告”。这是完全不标准和糟糕的建议。标签nohref上不存在a
2021-03-16 02:05:22
主要浏览器不支持它,我们为什么要使用它?w3schools.com/tags/att_area_nohref.asp
2021-03-21 02:05:22

最佳答案是一种非常糟糕的做法,永远不要链接到空哈希,因为它可能会在未来产生问题。

最好是将事件处理程序绑定到元素,正如许多其他人所说,但是,<a href="javascript:doStuff();">do stuff</a>在每个现代浏览器中都可以完美运行,并且我在渲染模板时广泛使用它以避免必须为每个实例重新绑定。在某些情况下,此方法可提供更好的性能。青年会

另一个有趣的花絮......

onclick&href直接调用 javascript 时有不同的行为。

onclickthis正确传递上下文,而href不会,或者换句话说<a href="javascript:doStuff(this)">no context</a>不会起作用,而<a onclick="javascript:doStuff(this)">no context</a>会。

是的,我省略了href. 虽然这不符合规范,但它适用于所有浏览器,但理想情况下它应该包含一个href="javascript:void(0);"很好的衡量标准