事件处理程序代码中" javascript:"的目的(如果有)是什么?
最近,我一直在努力通过尽可能多地阅读javascript代码来提高自己的javascript技能。在执行此操作时,有时会看到在HTML元素标签中的事件处理程序属性前面添加了javascript:前缀。此前缀的目的是什么?基本上,以下两者之间是否有明显的区别:
onchange="javascript: myFunction(this)"
和
onchange="myFunction(this)"
?
解决方案
回答
在示例中可能什么也没有。我的理解是javascript:用于锚标记(代替实际的href)。我们将使用它,以便脚本可以在用户单击链接时执行,而无需启动导航回页面(空白的" href"与" onclick"结合使用)。
例如:
<a href="javascript:someFunction();">Blah</a>
而不是:
<a href="" onclick="someFunction();">Blah</a>
回答
我没有JavaScript的权限,也许比问问者更傻,但是AFAIK的不同之处在于,在URI上下文中首选使用/ javascript:前缀,其中的参数也可以是传统的HTTP URL作为JavaScript触发器。
因此,我的直观回答是,由于onChange
需要JavaScript,因此javascript:
前缀是多余的(如果不是完全错误的话)。但是,我们可以在地址栏中写成" javascript:myFunction(this)",然后该函数就会运行。如果没有javascript :,浏览器将尝试将myFunction(this)解释为URL,并尝试获取DNS信息,浏览至该服务器等。
回答
我不知道javascript:前缀是否意味着onevent属性中的任何内容,但是我知道当尝试在新标签页中打开链接时,它们在锚标签中很烦人。 href应该用作回退,并且永远不要将javascript添加到链接上。
回答
It should only be used in the href tag.
这是荒谬的。
可接受的方式是这样的:
<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>
但是要回答OP,通常不再需要使用javascript:
了。实际上,我们应该添加脚本中的javascript事件,而不是内联在标记中。但这是我认为很纯粹的东西:-D
回答
不应该在事件处理程序中使用它(尽管大多数浏览器在防御性上运行,并且不会惩罚我们)。我还要指出,不应在锚的href属性中使用它。如果浏览器支持javascript,它将使用正确定义的事件处理程序。如果没有浏览器,则javascript:链接将显示为损坏。 IMO,最好将他们指向一个页面,说明他们需要启用javascript才能使用该功能,或者最好是非javascript必需的功能版本。因此,类似:
<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a>
编辑:想到使用javascript:的充分理由。书签。例如,这将我们发送到google reader以查看页面的rss feed:
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:在JS代码中(例如在onclick属性中)只是一个标签,供继续/定位标签语句使用,该标签可能被浏览器支持,也可能不受浏览器支持(可能不在任何地方)。可能是zipzambam:而是。即使标签无法使用,浏览器仍会接受它,因此不会引起错误。
这意味着,如果某人在onclick属性中扔了一个无用的标签,则他们可能不知道自己在做什么,而只是出于下面的习惯而被复制和粘贴。
javascript:href属性中表示Javascript URI。
例子:
javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B
回答
@mercutio
That's ridiculous.
不,它不是很荒谬,javascript:是一种伪协议,实际上只能用作链接的主题,因此他是对的。建议确实更好,但是最好的方法是使用不引人注目的JavaScript技术来遍历HTML元素并以编程方式添加行为,如jQuery之类的库中所使用的。
回答
Basically, is there any appreciable difference between: onchange="javascript: myFunction(this)" and onchange="myFunction(this)" ?
假设意思是" href =" javascript:myFunction(this)",是的,尤其是在使用javascript加载内容时。使用javascript:伪协议使某些人和所有搜索引擎无法访问内容,而如果禁用了javascript或者在特定客户端中不可用,则使用真正的href并使用javascript更改链接的行为可以使内容可访问。
回答
实际上,事件处理程序中javascript:的起源只是IE特定的东西,因此我们可以指定除处理程序之外的语言。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。这是因为vbscript
也是IE中受支持的客户端脚本语言。这是" vbscript:"的示例。
在其他浏览器中(如Shadow2531所说),javascript:只是一个标签,基本上被忽略。
正如DannySmurf所指出的,href =" javascript:..."
可用于链接中以执行javascript代码。
回答
Flubba:
在HREF中使用javascript:在Firefox和其他浏览器中会破坏"在新窗口中打开"和"在新选项卡中打开"。
这不是"错误",但是如果我们要使站点难以导航...