可能重复:
Do you ever need to specify javascript: in an onclick?
要在DOM事件上执行JavaScript,您可以使用以下内容:
<div onclick="alert('Alert');">Alert</div>
这样的事情似乎也有效:
<div onclick="javascript: alert('Alert');">Alert</div>
但是,我听说第二个例子是“坏”,第一个例子应该在第二个例子中使用。
这不好吗?如果是这样,为什么这么糟糕? alert('Alert')
和javascript: alert('Alert')
之间有什么区别?
如何在<a>
标签中使用它(如果它有任何不同)?
<a href="javascript: alert('Alert');">Alert</a>
编辑:为了澄清,我特别询问javascript:
部分,而不是我如何将内联JavaScript与我的标记混合在一起。对此感到抱歉。
答案 0 :(得分:10)
哦,奇妙的混乱的JavaScript世界。您发布的代码可能与大多数程序员认为的不同。
以下各行之间存在差异:
<a onclick="alert('Hello World!')"...>example</a> //V1
<a href="javascript: alert('Hello World!')"...>example</a> //V2
<a onclick="javascript: alert('Hello World')"...>example</a> //V3
虽然他们都会提醒Hello World!
。
第一个(V1)具有通过click
属性绑定的内联[onclick]
事件。它还可能包含[href]
属性,该属性在[onclick]
属性执行后导航到另一个位置,或者代码中绑定的任意数量的其他click
事件,假设默认行为没有被阻止了。
第二个(V2)将可执行javascript:
个网址设置为[href]
属性。它还可能包含[onclick]
属性或外部脚本中绑定的其他click
事件。
第一和第二示例(V1和V2)具有相同的代码,即:
alert('Hello World!')
第三个示例(V3)具有通过click
属性绑定的内联[onclick]
事件,就像V1,但是正在执行的代码不同。执行的代码是:
javascript: alert('Hello World')
虽然它看起来像javascript:
网址,但它实际上只是在javascript中使用标签。
JavaScript中的标签对于跳过嵌套循环很有用,如下面的示例代码所示:
label: for (i = 0; i < 5; i++) { //labeled line
for (j = 0; j < 5; j++) {
console.log(i, j);
if (i === 2 && j === 3) {
break label; //this jumps out of both for loops
}
}
}
在大多数内联JavaScript中,它被滥用,因为作者不理解这三种格式之间的区别。
为什么使用
javascript: <code>
不好?
这是一个主要问题。它假设使用javascript: <code>
错误。
javascript: <code>
不错 。这是一个工具。工具本身并不好或坏,只有使用这些工具的人才是。你不会把锤子称为“坏”,即使有人用它作为武器。
javascript: <code>
有一些不错的用途。在大多数情况下,您不应该使用它,因为它是wrong tool for the job,但是如果您正在编写书签,则必需使用javascript: <code>
格式。< / p>
此外,还有一些利基上下文,将javascript内联保留是有意义的。例如,在页面中添加一个简单的print
按钮:
<a href="#" onclick="window.print(); return false">Print</a>
虽然这个例子很容易被一个类取代并外化javascript:
<a href="#" class="print">Print</a>
<script>
//jQuery used for brevity
$(document).on('click', '.print', function () {
window.print();
return false;
});
</script>
答案 1 :(得分:2)
使用javascript:
标签没有任何问题。它大部分时间都被认为是糟糕的风格。
onclick
- 处理程序已经是JavaScript了,所以重复这个只是毫无意义的冗余信息(事实上,它正在通过添加名为javascript
的标签来执行代码 - 但在大多数情况下这是不应该有任何影响)。href
属性中的JavaScript代码将更适合放置在onclick
处理程序中,因此您可以使用href
为禁用JavaScript的用户提供链接。这称为Progressive Enhancement。有关更多详细信息,您可能需要查看这篇关于“无用的javascript:伪协议”的博客文章