什么时候需要指定 JavaScript 协议?
-
22-09-2019 - |
题
我的印象是,在 URL 属性(例如 href)中使用 JavaScript 时,只需要指定“协议”。这是唯一“有用”的上下文吗 javascript:
?
明智:
<a href="javascript:alert('Hello')">World!</a>
愚蠢的:
<form onsubmit="javascript:alert('oops!')">
这是正确的吗?或者是否有一些我需要注意的晦涩错误/用例?
解决方案
这 javascript:
事件处理程序的伪协议只会被忽略,您不需要它,JavaScript引擎将解释 javascript:
作为一个 标签语句.
标签只是为语句提供标识符,并让您在程序中的其他地方参考它。
恕我直言,这个伪协议仅对书签有用...
推荐文章:
其他提示
正如其他答案所提到的,避免使用 javascript:
href 链接,并且在事件处理程序属性中完全没有必要。然而,自从 A
标签有时在语义上仍然是正确的,您需要在 href
属性如果你想要你的 :link
和 :hover
要应用于 Internet Explorer 中的元素的 CSS 样式。在这种情况下,使用:
<a href="#" onclick="doSomething(); return false;">Link</a>
或者
<a href="javascript://" onclick="doSomething();">Link</a>
有一个(有点模糊的)错误 javascript 协议 - 在 Internet Explorer* 中,当您单击链接时,它会认为您将离开页面。如果您正在使用 window.onbeforeunload, ,那么此时就会出现您的导航离开消息。仅出于这个原因,我们就停止使用 javascript 协议完全正确,因此我们不会出现此错误,因为当我们向某个页面添加导航离开消息时,我们忘记检查它。
* 我可能应该在第一次写这篇文章时指定版本。我完全不记得了,但以防万一该错误仅出现在现在大部分已不可用的浏览器(如 IE 6 或 7)中,您可能最好自己测试一下。
永远不要指定它。做这件事是错误的 <a>
标签,应该像这样编码的标签:
<a href='#' onclick='alert("Hello")'>World</a>
从过去的日子开始。我唯一能想到它使用的位置将在浏览器地址栏(和书签书签)中。将其放在您的页面上。
实际上,您是正确的。
您需要在任何预期脚本以外的其他情况下执行此操作。从理论上讲,您可以坚持 javascript:whatever
您可以使用URL的任何地方,但这永远不会得到支持,现在正式建议使用使用。
然而, ,您真的不应该使用 javascript:
根本。对于链接,您可以使用 onclick
属性。如今实际上发生的是JavaScript引擎正在识别 javascript:
作为标签,这就是代码执行的原因。
你们都应该检查一下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 等事件(这需要更多工作,但不会“破坏”锚标记的预期行为)。