我希望在点击事件时运行一个简单的JavaScript函数,而不进行任何重定向。
将JavaScript调用放在 href
属性中(像这样)与使用 onclick
有什么区别或好处吗?
<a href="javascript:my_function();window.print();">....</a>
将其放入onclick
属性(绑定到onclick
事件) vs. 不将其放入onclick
属性?
我希望在点击事件时运行一个简单的JavaScript函数,而不进行任何重定向。
将JavaScript调用放在 href
属性中(像这样)与使用 onclick
有什么区别或好处吗?
<a href="javascript:my_function();window.print();">....</a>
将其放入onclick
属性(绑定到onclick
事件) vs. 不将其放入onclick
属性?
bad:
不好的:
<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; });
href
不设置为#
,而是设置为实际链接。 - helly0d将 onclick 放在 href 内会冒犯那些坚信内容与行为应该分离的人。他们认为你的 HTML 内容应该仅关注内容本身,而不是呈现或行为。
如今的典型做法是使用 JavaScript 库(如 jQuery)并创建一个事件处理器。它看起来会像这样:
$('a').click( function(e) {e.preventDefault(); /*your_code_here;*/ return false; } );
href
中与将其放在onclick
中的区别吗?假设出于某种原因您要将其内联,应该使用哪个?(实际上,我会按照您建议的做法去做,但您似乎忽略了这两个属性之间的差异。) - nnnnnnonclick
处理程序中的this
关键字将引用其onclick
属性所在的DOM元素(在本例中为<a>
元素),而href
属性中的this
将引用window
对象。href
属性(即<a onclick="[...]">
),默认情况下浏览器将显示text
光标(而不是通常所需的pointer
光标),因为它把<a>
视为锚点而不是链接。href
导航指定操作时,浏览器通常支持使用快捷方式或上下文菜单在单独的窗口中打开那个href
。当仅通过onclick
指定操作时,这是不可能的。<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>
编辑警告:请查看评论,这个答案中使用'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>
nohref
属性。这是处理此类 JavaScript 操作最合乎逻辑/优雅的方式。它与 FF12 和 IE8 兼容。因此,我将用 nohref
替换所有的 href="JavaScript:void(0);"
。非常感谢。干杯。 - oHo<a onClick="alert('Hello World')">HERE</a>
相同。 - nZeusa
标签上不存在nohref
属性。 - Colin 't Hart<a href="javascript:doStuff();">做事情</a>
都能完美运行,我在渲染模板时广泛使用它,以避免为每个实例重新绑定。在某些情况下,这种方法提供了更好的性能。因人而异。
另一个有趣的小贴士...
onclick
和href
在直接调用JavaScript时具有不同的行为。
onclick
将正确地传递this
上下文,而href
不会,或者换句话说,<a href="javascript:doStuff(this)">无上下文</a>
将无法工作,而<a onclick="javascript:doStuff(this)">无上下文</a>
将可以。
是的,我省略了href
。虽然这不符合规范,但在所有浏览器中都可以工作,尽管理想情况下应该包括href="javascript:void(0);"
以确保安全。
#
问题苦苦挣扎。顺便说一句,我注意到即使我使用JS分配了单击处理程序,href="javascript:void(0);"
仍然是一个好主意,因为如果没有href
,链接的UI就不太对(至少在Chrome上,它会失去默认的鼠标光标和链接颜色)。 - Jason C最好的方法是使用:
<a href="#" onclick="someFunction(e)"></a>
问题在于这会在浏览器中在页面 URL 的末尾添加一个哈希(#),因此需要用户点击两次后退按钮才能返回到您之前的页面。鉴于此,您需要添加一些代码来停止事件传播。大多数 JavaScript 工具包已经有了此功能。例如,dojo 工具包使用的是:dojo.stopEvent(event);
要这样做。
href="#"
,浏览器将会寻找一个已命名的锚点标签,但由于它找不到,所以会使窗口滚动到页面顶部。如果你已经在页面顶部,这可能不会被注意到。
为了避免这种行为,请改用:href="javascript:;"
。 - alonso.torres除此之外,href会在浏览器的状态栏中显示,而onclick则不会。我认为在那里显示JavaScript代码并不友好。
这个有效
<a href="#" id="sampleApp" onclick="myFunction(); return false;">Click Here</a>
我使用以下代码行使它对我起作用:
<a id="LinkTest" title="Any Title" href="#" onclick="Function(); return false; ">text</a>