我的印象是,我只需要在URL属性中使用JavaScript时指定“协议”,例如在hrefs中。这是javascript:
唯一“有用”的背景吗?
显
<a href="javascript:alert('Hello')">World!</a>
傻:
<form onsubmit="javascript:alert('oops!')">
这是对的吗?或者是否需要注意一些模糊的bug /用例?
答案 0 :(得分:15)
事件处理程序上的javascript:
伪协议只会被忽略,您不需要它,JavaScript引擎会将javascript:
解释为Label Statement。
标签只是为语句提供标识符,并允许您在程序的其他位置引用它。
恕我直言,这个伪协议只适用于bookmarklet ......
推荐文章:
答案 1 :(得分:6)
正如其他答案所提到的,避免使用javascript:
href链接,并且在事件处理程序属性中完全没有必要。但是,由于A
代码有时在语义上仍然正确,因此如果您希望将href
和:link
CSS样式应用于:hover
属性,则需要在<a href="#" onclick="doSomething(); return false;">Link</a>
属性中添加一些内容Internet Explorer中的元素。在这种情况下,请使用:
<a href="javascript://" onclick="doSomething();">Link</a>
或者
{{1}}
javascript 协议存在一个(有点模糊)错误 - 在Internet Explorer *中,当您单击链接时,它会认为您将离开该页面。如果您使用 window.onbeforeunload ,则此时会显示您的导航消息。仅仅因为这个原因,我们已经完全停止使用 javascript 协议,因此我们没有显示此错误,因为我们在向某个页面添加导航消息时忘记检查它。
*我可能应该在我第一次写这个时指定版本。我根本不记得了,但是为了防止这个错误仅出现在IE 6或7等现在大多已经不存在的浏览器中,你最好自己测试一下。
答案 2 :(得分:5)
根本不要指定它。在<a>
标签中执行此操作是错误的,而应将其编码为:
<a href='#' onclick='alert("Hello")'>World</a>
这是过去几天的残余。我唯一能想到它在哪里使用的将是浏览器地址栏(和书签书签)。把它放在你的页面之外。
答案 3 :(得分:2)
在实践中,你是对的。
您需要在任何需要脚本之外的其他实例中执行此操作。理论上,您可以将javascript:whatever
粘贴到可以使用URL的任何位置,但这从未得到支持,现在正式建议不要使用。
然而,您根本不应该使用javascript:
。对于链接,您可以使用onclick
属性。现在实际发生的是JavaScript引擎将javascript:
标识为标签,这就是代码执行的原因。
答案 4 :(得分:1)
你们都应该退房 http://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlers 特别是“Lasse Reichstein Nielsen”的帖子,因为大多数答案在某些方面都是不正确的。
还要记住,锚标签根本不需要href!那是
<a>hi</a>
是有效的xhtml。使用href="#"
的问题是它可能会滚动到页面顶部..根本不需要它。最后,如果您实际上不想要锚标记的行为,则不应使用它。您可以使用css(cursor:pointer
)以及像mouseenter和mouseleave这样的事件来模拟锚点(这样做更有效,但不会“破坏”锚标记的预期行为)。