Onclick在未点击的情况下被触发

9

en.onclick = setCookie('english');

为什么没有点击它,它就被触发了?

我有三个旗帜,应该在点击时将一个cookie设置为他们的语言,但最后一个旗帜总是立即被触发...


你能否把一些代码粘贴过来吗? - Ashwin Krishnamurthy
4个回答

24

你上面的代码评估 setCookie('english') 并将其返回的值(如果有)放入到 en.onclick 中。为了将它分配为事件处理程序,需要将其包装在一个函数中:

en.onclick = function(){
   setCookie('english');
};

好的,我明白了。你如何区分将某物传递给函数(就像你在这里做的那样)或者对其进行评估(就像我所做的那样)? - Jarco
2
@Jarco,由于你正在使用回调函数,因此你总是需要提供一个要调用的函数。事件处理程序始终需要回调函数。 - JohnP
可能是一个初学者的问题:Callback 是什么意思? - Jarco
1
@Jarco:如果函数名后面带有括号(带或不带参数),那就意味着你正在评估它。要将函数作为函数指针传递,只需使用函数名即可。在上面的示例中,我创建了一个匿名内联函数,并将该函数的指针放入en.onclick中。 - DarthJDG
好的。这只是关于 JavaScript 可能性和不可能性的问题。谢谢。我现在理解得更清楚了。 - Jarco

5
因为你必须使用类似于这样的东西。
en.onclick=function(){
  setCookie('english');
}

3
因为你正在调用方法setCookie(...)。请尝试以下操作:
en.onclick = setCookie;

使用括号调用方法,不使用括号则将其作为对象传递。

或者尝试这个:

en.onclick = function() { setCookie('english') };

这里我们创建一个新函数,使用适当的参数调用setCookie


2

这是因为你正在运行该方法并将结果分配给en.onclick。

你可能想要做的是

en.onclick = function(){setCookie('english');};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接