我看到很多答案都涉及解决方法,但没有一个能够击中问题的核心。你所做的事情背后的原因是不起作用的,以及为什么它经常起作用。
你正在使用javascript:XXX
作为href属性的值,即锚标签的超文本源链接属性。其中XXX
是一些JavaScript代码,一个表达式,比如函数调用。
当使用这种表示法时,XXX
代码首先被评估。如果表达式产生一个值,那么大多数浏览器将清除页面并仅显示结果值。
例如,
<a href="javascript:1+1">点击这里!</a>
将导致2
被显示。
同样,这可以通过一个函数重写来产生相同的结果:
function addTwo() {
return 1+1;
}
<a href="javascript:addTwo()">点击这里!</a>
(期望输出2
)
对于大多数浏览器,如果评估XXX
代码并且没有结果值,则它将不显示任何内容--因此,它将停留在同一页上。因此,有几种方法可以实现此行为。
<a href="javascript:var two = addTwo()">点击这里!</a>
在赋值期间没有剩余的结果。
- 我们可以包装另一个不返回任何内容的函数来围绕此函数。
A.
function addTwo2() {
addTwo();
}
<a href="javascript:addTwo2()">Click Here!</a>
B. 相同的事情,但都是内联的:
<a href="javascript:(function() { addTwo();})()">点击这里!</a>
C. 相同的事情,但使用你经常看到的 !
习惯用语。(相同的逻辑意义,只是使用非运算符来实现更少的字符):
<a href="javascript:!function() { addTwo();}()">点击这里!</a>
在大多数函数式编程语言中,我们可以使用所谓的钩子来代替:
function addTwo() {
alert( "sfsf" );
return 1+1;
}
var x = addTwo;
addTwo = function() {
x();
}
<a href="javascript:addTwo();">点击这里!</a>
最后,如果您的函数或表达式不需要返回任何内容,请在该函数中省略。
总的来说:
当你使用javascript:
href链接时,点击后会先执行javascript:
后面的javascript代码,如果它有返回值,浏览器将仅显示该结果,否则浏览器将停留在当前页面上,因为它没有任何可显示的值。