事件处理程序标签中“javascript:”的目的是什么(如果有的话)?

时间:2008-08-22 19:10:56

标签: javascript

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

onchange="javascript: myFunction(this)"

onchange="myFunction(this)"

10 个答案:

答案 0 :(得分:18)

你的例子中可能没什么。我的理解是javascript:用于锚标记(代替实际的href)。您可以使用它,以便您的脚本可以在用户点击链接时执行,但不会启动导航回页面(空白href加上onclick会这样做。)

例如:

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

而不是:

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

答案 1 :(得分:12)

它不应该用在事件处理程序中(尽管大多数浏览器都是防御性的,并且不会惩罚你)。我还认为它不应该用在锚的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)
}

要让用户轻松添加此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>

答案 2 :(得分:4)

  

它只应在href标签中使用。

那太荒谬了。

接受的方式是:

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

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

答案 3 :(得分:2)

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

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

正如DannySmurf指出的那样,

href="javascript:..."可用于执行javascript代码的链接。

答案 4 :(得分:1)

我不是JavaScript的权威,也许不是提问者的权威,但AFAIK,不同之处在于URI上下文中首选/需要javascript:前缀,其中参数可能也是如此传统的HTTP URL作为JavaScript触发器。

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

答案 5 :(得分:1)

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

这意味着,如果有人在onclick属性中抛出无用的标签,他们可能不知道他们正在做什么,只是复制和粘贴,或者是出于习惯而做下面的事情。

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

Example

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B

答案 6 :(得分:0)

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

答案 7 :(得分:0)

@mercutio

  
    

那太荒谬了。

  

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

答案 8 :(得分:0)

  
    

基本上,onchange="javascript: myFunction(this)"onchange="myFunction(this)"之间是否存在明显差异?

  

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

答案 9 :(得分:0)

Flubba:

javascript:中使用HREF在Firefox和其他浏览器中打开“在新窗口中打开”和“在新标签页中打开”。

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