最近,我一直在努力通过阅读尽可能多的 javascript 代码来提高我的 javascript 技能。在执行此操作时,我有时会看到javascript:
附加到 HTML 元素标记中的事件处理程序属性前面的前缀。这个前缀的目的是什么?基本上,两者之间是否有任何明显的区别:
onchange="javascript: myFunction(this)"
和
onchange="myFunction(this)"
?
最近,我一直在努力通过阅读尽可能多的 javascript 代码来提高我的 javascript 技能。在执行此操作时,我有时会看到javascript:
附加到 HTML 元素标记中的事件处理程序属性前面的前缀。这个前缀的目的是什么?基本上,两者之间是否有任何明显的区别:
onchange="javascript: myFunction(this)"
和
onchange="myFunction(this)"
?
在您的示例中可能没有任何内容。我的理解是javascript:
用于锚标签(代替实际的href
)。您将使用它,以便您的脚本可以在用户单击链接时执行,但无需启动返回页面的导航(空白href
加上 an即可onclick
)。
例如:
<a href="javascript:someFunction();">Blah</a>
而不是:
<a href="" onclick="someFunction();">Blah</a>
它不应该在事件处理程序中使用(尽管大多数浏览器都是防御性的,不会惩罚你)。我还认为它不应该用在锚的 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)
}
要让用户轻松添加此书签,您可以像这样格式化它:
<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>
它应该只用在 href 标记中。
这是荒谬的。
接受的方式是这样的:
<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>
但是要回答OP,通常没有理由再使用javascript:
了。实际上,您应该从脚本中附加 javascript 事件,而不是内联在标记中。但是,我认为这是一件纯粹的事情:-D
事件处理程序的起源javascript:
实际上只是 IE 特定的东西,因此您可以指定除处理程序之外的语言。这是因为vbscript
它也是 IE 中支持的客户端脚本语言。这是"vbscript:"的示例。
在其他浏览器中(正如Shadow2531所说)javascript:
只是一个标签,基本上被忽略了。
href="javascript:..."
正如 DannySmurf 指出的那样,可以在链接中使用以执行 javascript 代码。
我在 JavaScript 方面没有权威,也许比提问者更傻,但是 AFAIK,不同之处在于javascript:
前缀是首选/在 URI 上下文中是必需的,其中参数可能是传统的 HTTP URL 作为 JavaScript 触发器.
所以,我直观的回答是,由于onChange
需要 JavaScript,javascript:
前缀是多余的(如果不是完全错误的话)。但是,您可以javascript:myFunction(this)
在地址栏中写入内容,然后该功能就会运行。如果没有javascript:
,您的浏览器将尝试解释myFunction(this)
为 URL 并尝试获取 DNS 信息、浏览到该服务器等...
javascript:在 JS 代码中(如在 onclick 属性中)只是一个标签,用于与浏览器可能支持或不支持的 continue/goto 标签语句一起使用(可能不在任何地方)。它可能是 zipzambam: 代替。即使标签无法使用,浏览器仍然会接受它,因此不会导致错误。
这意味着如果有人在 onclick 属性中添加了一个无用的标签,他们可能不知道自己在做什么,而只是复制和粘贴,或者出于以下习惯而这样做。
javascript: 在 href 属性中表示一个 Javascript URI。
示例:
javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B
我不知道javascript:
前缀是否意味着onevent
属性中的任何内容,但我知道在尝试在新选项卡中打开链接时它们在锚标记中很烦人。href
应该用作后备,并且永远不要将 javascript 附加到链接。
这是荒谬的。
不,这并不荒谬,javascript:是一个伪协议,确实只能用作链接的主题,所以他说得很对。您的建议确实更好,但最好的方法是使用不显眼的 javascript 技术来迭代 HTML 元素并以编程方式添加行为,就像在 jQuery 等库中使用的那样。
onchange="javascript: myFunction(this)"
基本上,:和之间有什么明显的区别onchange="myFunction(this)"
吗?
假设您的意思 href="javascript: myFunction(this)"
是,是的,尤其是在使用 javascript 加载内容时。使用 javascript: 伪协议使某些人和所有搜索引擎无法访问内容,而使用真正的 href 然后使用 javascript 更改链接的行为可以在 javascript 关闭或在特定客户端中不可用时使内容可访问。
绒毛虫:
javascript:
在 Firefox 和其他浏览器中使用HREF
中断“在新窗口中打开”和“在新选项卡中打开”。
这不是“错误的”,但如果你想让你的网站难以导航......