问题描述
|
JavaScript事件处理程序中的“ 0”是什么?
如:
<input onkeydown=\"javascript:return false;\" type=\"text\" name=\"textfield\" />
解决方法
这是一个错误。事件处理程序中不需要伪协议。
在URL(例如,
a
元素href
属性)上,如果输入javascript:
并在其后加上javascript,浏览器将运行javascript代码。
对于事件处理程序,虽然浏览器不会报告错误,但这不是必需的。
, 在这种情况下,它将被解释为标签。您也可以在此处写foobar:
,其效果相同。
尽管它可能很有用,但在JavaScript代码中并不需要它(我从未见过在实际代码中使用过它):
提供带有标识符的语句,您可以使用break
或continue
语句引用该标识符。
例如,可以使用标签标识循环,然后使用break
或continue
语句指示程序是应中断循环还是继续执行。
在您的情况下,标记应仅为:
<input onkeydown=\"return false;\" type=\"text\" name=\"textfield\" />
但是,如果您将它用作URI中的方案,它会告诉浏览器将URI解释并执行为JavaScript:
<a href=\"javascript:alert(1);\">Foo</a>
(我并不是说您应该做这样的事情。)
我假设不太熟悉JavaScript的人看到了这一点,并认为他们必须在事件处理程序中的HTML的JavaScript代码之前到处放置“ 0”。
, 您可以只写return false
。那时,“ 14”协议在链接中很有用。 href
属性:<a href=\"javascript:return false\">
, 这是不应该存在的东西。
前缀“ 0”主要用于链接,因为浏览器中的“ 0”协议通常会执行代码,例如:
<a href=\"javascript:alert(\'test\')\">Test</a>
不过,在事件处理程序中,它已经在解析JavaScript,因此不是必需的。它基本上什么也没做。
, 只是告诉浏览器以下是JavaScript代码的标记。但是,它不是必需的,因此您不必包括它。