【问题标题】:What is "javascript:" in a JavaScript event handler?JavaScript 事件处理程序中的“javascript:”是什么?
【发布时间】:2011-09-06 03:22:44
【问题描述】:

什么是 JavaScript 事件处理程序中的 javascript:

如:

<input onkeydown="javascript:return false;" type="text" name="textfield" />

【问题讨论】:

标签: javascript javascript-events


【解决方案1】:

这只是告诉浏览器后面是 JavaScript 代码的标记。但是,它不是必需的,因此您不必包含它。

【讨论】:

  • 这不是真的。它将被解释为标签,不会告诉浏览器任何内容。
【解决方案2】:

这是不应该存在的东西。

javascript: 前缀主要用于链接,因为浏览器中的javascript: 协议通常会执行代码,例如:

<a href="javascript:alert('test')">Test</a>

不过,在事件处理程序中,它已经在解析 JavaScript,因此不需要它。它基本上什么都不做。

【讨论】:

    【解决方案3】:

    你可以写return false。当时javascript 协议在链接中很有用。 href属性:&lt;a href="javascript:return false"&gt;

    【讨论】:

      【解决方案4】:

      在这种情况下,它将被解释为label。你也可以在这里写foobar:,效果一样。

      它在 JavaScript 代码中并不是真正需要的(我从未见过它在实际代码中使用过),尽管它可能很有用:

      提供带有标识符的语句,您可以使用 breakcontinue 语句引用该标识符。

      例如,您可以使用标签来标识循环,然后使用breakcontinue 语句来指示程序是应该中断循环还是继续执行。

      在您的情况下,标记应该是:

      <input onkeydown="return false;" type="text" name="textfield" />
      

      但如果你在 URI 中使用它作为方案,它会告诉浏览器将 URI 解释为 JavaScript 并执行:

      <a href="javascript:alert(1);">Foo</a>
      

      (我不是说你应该这样做。)

      我假设不太熟悉 JavaScript 的人看到了这一点,并认为他们必须将 javascript: 放在 HTML 中 JavaScript 代码前面的任何地方,包括事件处理程序。

      【讨论】:

      • +1 表示标签声明。对此似乎存在一些长期存在的困惑,我相信它源于在页面上使用 MS 的 vbscript 和 JavaScript。虽然,即便如此,它仍然没有达到您的预期(事件处理程序使用页面上第一个定义的语言)。
      • @Andy:我一直认为这种混乱来自&lt;a href="javascript:doStuff()"&gt; 的广泛使用,但我没有证据支持这一点。是否可以在事件处理程序属性中编写 VBScript?
      • @Tim:我也没有任何证据,但我记得看到一段代码利用了 J[ava]Script 不可用的 VBScript 功能,并且使用了 javascript: 和 @ 987654332@ 在事件中。我认为它不起作用,IIRC IE 只是选择了一个默认值用于事件属性。
      【解决方案5】:

      这是一个错误。事件处理程序中不需要伪协议。

      在 URL 上(例如a 元素 href 属性),如果您输入 javascript: 并在其后面加上 javascript,浏览器将运行 javascript 代码。

      对于事件处理程序,这不是必需的,但浏览器不会报告错误。

      【讨论】:

      • @user635409 - 我不明白你在评论中问什么。
      • 它只是不会巧合地抛出错误:它是有效的语法,因为它表示 JS 中的标签。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多