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

onchange="javascript: myFunction(this)"

onchange="myFunction(this)"

===============>>#1 票数:19 已采纳

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

例如:

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

而不是:

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

===============>>#2 票数:13

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

===============>>#3 票数:5

它应该只在href标签中使用。

这是荒谬的。

接受的方式是这样的:

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

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

===============>>#4 票数:2

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

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

正如DannySmurf指出的那样, href="javascript:..."可以在链接中用于执行javascript代码。

===============>>#5 票数:1

我不是JavaScript的权威,也许不是提问者的权威,而是AFAIK,区别在于javascript:前缀在URI-contexts中是首选/必需的,其中参数可以与传统的HTTP URL一样JavaScript触发器。

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

===============>>#6 票数:1

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

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

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

示例

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

===============>>#7 票数:0

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

===============>>#8 票数:0

@mercutio

这是荒谬的。

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

===============>>#9 票数:0

基本上,在onchange="javascript: myFunction(this)"onchange="myFunction(this)"之间是否有任何明显的区别?

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

===============>>#10 票数:0

Flubba:

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

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

  ask by Jesse Taber translate from so

未解决问题?本站智能推荐: