18

最近,我一直在努力通过阅读尽可能多的 javascript 代码来提高我的 javascript 技能。在执行此操作时,我有时会看到javascript:附加到 HTML 元素标记中的事件处理程序属性前面的前缀。这个前缀的目的是什么?基本上,两者之间是否有任何明显的区别:

onchange="javascript: myFunction(this)"

onchange="myFunction(this)"

?

4

10 回答 10

19

在您的示例中可能没有任何内容。我的理解是javascript:用于锚标签(代替实际的href)。您将使用它,以便您的脚本可以在用户单击链接时执行,但无需启动返回页面的导航(空白href加上 an即可onclick)。

例如:

<a href="javascript:someFunction();">Blah</a>

而不是:

<a href="" onclick="someFunction();">Blah</a>
于 2008-08-22T19:12:17.213 回答
13

它不应该在事件处理程序中使用(尽管大多数浏览器都是防御性的,不会惩罚你)。我还认为它不应该用在锚的 href 属性中。如果浏览器支持 javascript,它将使用正确定义的事件处理程序。如果浏览器没有,则 javascript: 链接将出现损坏。IMO,最好将他们指向一个页面,说明他们需要启用 javascript 才能使用该功能,或者更好的是非 javascript 所需的功能版本。所以,像:

<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a>

编辑:想了一个很好的理由来使用 javascript:。书签。例如,这个将您发送到谷歌阅读器以查看页面的 rss 提要:

var b=document.body;
if(b&&!document.xmlVersion){
  void(z=document.createElement('script'));
  void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');
  void(b.appendChild(z));
}else{
  location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)
}

要让用户轻松添加此书签,您可以像这样格式化它:

<a href="javascript:var%20b=document.body;if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}">Drag this to your bookmarks, or right click and bookmark it!</a>
于 2008-08-22T19:20:02.500 回答
5

它应该只用在 href 标记中。

这是荒谬的。

接受的方式是这样的:

<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>

但是要回答OP,通常没有理由再使用javascript:了。实际上,您应该从脚本中附加 javascript 事件,而不是内联在标记中。但是,我认为这是一件纯粹的事情:-D

于 2008-08-22T19:19:31.800 回答
2

事件处理程序的起源javascript:实际上只是 IE 特定的东西,因此您可以指定除处理程序之外的语言。这是因为vbscript它也是 IE 中支持的客户端脚本语言。这是"vbscript:"的示例。

在其他浏览器中(正如Shadow2531所说)javascript:只是一个标签,基本上被忽略了。

href="javascript:..."正如 DannySmurf 指出的那样,可以在链接中使用以执行 javascript 代码。

于 2008-08-28T13:07:28.273 回答
1

我在 JavaScript 方面没有权威,也许比提问者更傻,但是 AFAIK,不同之处在于javascript:前缀是首选/在 URI 上下文中是必需的,其中参数可能是传统的 HTTP URL 作为 JavaScript 触发器.

所以,我直观的回答是,由于onChange需要 JavaScript,javascript:前缀是多余的(如果不是完全错误的话)。但是,您可以javascript:myFunction(this)在地址栏中写入内容,然后该功能就会运行。如果没有javascript:,您的浏览器将尝试解释myFunction(this)为 URL 并尝试获取 DNS 信息、浏览到该服务器等...

于 2008-08-22T19:17:53.583 回答
1

javascript:在 JS 代码中(如在 onclick 属性中)只是一个标签,用于与浏览器可能支持或不支持的 continue/goto 标签语句一起使用(可能不在任何地方)。它可能是 zipzambam: 代替。即使标签无法使用,浏览器仍然会接受它,因此不会导致错误。

这意味着如果有人在 onclick 属性中添加了一个无用的标签,他们可能不知道自己在做什么,而只是复制和粘贴,或者出于以下习惯而这样做。

javascript: 在 href 属性中表示一个 Javascript URI。

示例

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B
于 2008-08-22T20:01:21.747 回答
0

我不知道javascript:前缀是否意味着onevent属性中的任何内容,但我知道在尝试在新选项卡中打开链接时它们在锚标记中很烦人。href应该用作后备,并且永远不要将 javascript 附加到链接。

于 2008-08-22T19:18:22.240 回答
0

@mercutio

这是荒谬的。

不,这并不荒谬,javascript:是一个伪协议,确实只能用作链接的主题,所以他说得很对。您的建议确实更好,但最好的方法是使用不显眼的 javascript 技术来迭代 HTML 元素并以编程方式添加行为,就像在 jQuery 等库中使用的那样。

于 2008-08-22T20:13:33.043 回答
0

onchange="javascript: myFunction(this)"基本上,:和之间有什么明显的区别onchange="myFunction(this)"吗?

假设您的意思 href="javascript: myFunction(this)"是,是的,尤其是在使用 javascript 加载内容时。使用 javascript: 伪协议使某些人和所有搜索引擎无法访问内容,而使用真正的 href 然后使用 javascript 更改链接的行为可以在 javascript 关闭或在特定客户端中不可用时使内容可访问。

于 2008-08-22T20:55:32.333 回答
0

绒毛虫:

javascript:在 Firefox 和其他浏览器中使用HREF中断“在新窗口中打开”和“在新选项卡中打开”。

这不是“错误的”,但如果你想让你的网站难以导航......

于 2008-09-04T01:28:00.350 回答