什么';“的目的(如有)。”;javascript:";事件处理程序中的标记?

什么';“的目的(如有)。”;javascript:";事件处理程序中的标记?,javascript,Javascript,最近,我一直在通过尽可能多地阅读javascript代码来提高我的javascript技能。在这样做的过程中,我有时会看到在HTML元素标记的事件处理程序属性前面附加了javascript:前缀。这个前缀的用途是什么?基本上,以下各项之间是否存在明显差异: onchange="javascript: myFunction(this)" 及 ?您的示例中可能什么都没有。我的理解是,javascript:用于锚定标记(代替实际的href)。您可以使用它,以便在用户单击链接时执行脚本,但无需启动返回

最近,我一直在通过尽可能多地阅读javascript代码来提高我的javascript技能。在这样做的过程中,我有时会看到在HTML元素标记的事件处理程序属性前面附加了
javascript:
前缀。这个前缀的用途是什么?基本上,以下各项之间是否存在明显差异:

onchange="javascript: myFunction(this)"


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

例如:

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

而不是:

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

我不是JavaScript方面的权威,也许比询问者更愚蠢,但好吧,区别在于
JavaScript:
前缀在URI上下文中是首选/必需的,在URI上下文中,参数可能与JavaScript触发器一样是传统的HTTP URL


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

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

它应该只在href标记中使用

那太可笑了

公认的方式是:

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


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

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

<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a>
要让用户轻松添加此Bookmarklet,请将其格式化为:

<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>

javascript:in-JS代码(类似于onclick属性)只是一个用于continue/goto标签语句的标签,浏览器可能支持也可能不支持这些语句(可能不在任何地方)。它可能是zipzambam:相反。即使不能使用标签,浏览器也会接受它,这样就不会导致错误

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

javascript:在href属性中表示javascript URI

:

那太可笑了

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

基本上,在:
onchange=“javascript:myFunction(this)”
onchange=“myFunction(this)”
之间有什么明显的区别吗


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

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

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

DannySmurf指出,可以在链接中使用href=“javascript:…”来执行javascript代码。

Flubba:

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

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

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>
javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B