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

Jes*_*ber 17 javascript

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

onchange="javascript: myFunction(this)"
Run Code Online (Sandbox Code Playgroud)

onchange="myFunction(this)"
Run Code Online (Sandbox Code Playgroud)

The*_*urf 19

你的例子中可能没什么.我的理解是javascript:锚标签(代替实际href).您可以使用它,以便您的脚本可以在用户单击链接时执行,但不会启动导航回页面(空白href与空白相结合onclick).

例如:

<a href="javascript:someFunction();">Blah</a>
Run Code Online (Sandbox Code Playgroud)

而不是:

<a href="" onclick="someFunction();">Blah</a>
Run Code Online (Sandbox Code Playgroud)


Chr*_*org 13

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

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

编辑:想到使用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)
}
Run Code Online (Sandbox Code Playgroud)

要让用户轻松添加此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>
Run Code Online (Sandbox Code Playgroud)


mer*_*tio 5

仅应在href标记中使用。

这是荒谬的。

可接受的方式是这样的:

<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>
Run Code Online (Sandbox Code Playgroud)

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