我一直在努力通过阅读尽可能多的javascript代码来提高我的javascript技能。在执行此操作时,我有时会在HTML元素标记中看到javascript:
前缀附加到事件处理程序属性的前面。这个前缀的目的是什么?基本上,之间有任何明显的区别:
onchange="javascript: myFunction(this)"
和
onchange="myFunction(this)"
答案 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:
只是一个标签,基本上被忽略了。
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。
javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B
答案 6 :(得分:0)
我不知道javascript:
前缀是否意味着onevent
属性中的任何内容,但是当我尝试在新标签中打开链接时,我知道它们在锚标记中很烦人。 href
应该用作后退,永远不会将javascript附加到链接。
答案 7 :(得分:0)
那太荒谬了。
不,这不是荒谬的,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和其他浏览器中打开“在新窗口中打开”和“在新标签页中打开”。
这不是“错误”,但如果你想让你的网站难以导航......