10

有什么区别

<a onclick="someFunction">

<a onclick="someFunction()">

一个使用括号而不是另一个,但是使用其中一个有什么区别?什么是“正确”选项?如果我不使用任何href属性会发生什么?

据我所知,在javascript中, usingsomething = someFunc();将该函数的返回值分配给something变量。并且 usingsomething = someFunc;直接将函数(而不是其结果)分配给该变量(并且它主要用于将函数分配给事件)。例如,我可以为 onclick 事件分配一个函数。

但是我不明白的是,当在某些 html 元素内联事件中使用其中任何一个时会发生什么,如示例中所示,因为分配不是针对 javascript 变量,而是针对 html 属性,而这恰好是一个事件?请解释。

此外,将内联 onclick 函数分配给锚点(a)与其他元素(例如span div label等)是否有区别?它们有同样的效果吗?

旁注:我一直在这里阅读有关单击链接时如何运行函数的信息,并且我已经理解应该“内联”,而是使用不显眼的 javascript。(我提到它是为了避免对此进行辩论),但在我看到的例子中,他们没有提到我在内联时提到的两个选项的区别。

编辑:之所以提出这个问题,是因为他们在这里给出了一个没有在事件函数中使用括号的答案,并且没有人提到需要括号,所以我认为它是有效的。但我不知道使用()与不使用有什么区别。

4

3 回答 3

5

一个使用括号而不是另一个,但是使用其中一个有什么区别?

<a onclick="someFunction">不会做任何事情。括号导致调用函数。

有一个只包含标识符的语句(无论是函数名、变量还是其他)不会做任何事情(如果变量不存在则抛出引用错误)。

如果我不使用任何 href 属性会发生什么?

然后我会质疑你为什么首先使用一个<a>元素。

此外,将内联 onclick 函数分配给锚点(a)与其他元素(例如 span div 标签等)是否有区别?

只是它们不是(默认情况下)可聚焦的元素(也不是没有 href 属性的 a 元素),因此无法通过切换到元素并按 enter 来触发 click 事件。如果您想要一个在触发时对 JS 执行某些操作的元素,并且当 JS 不可用时您没有合理的回退,请使用按钮。

于 2013-06-05T16:23:47.790 回答
1

事件处理程序属性的值是一系列 Javascript语句,而不是表达式。

它没有为属性分配函数值;这是在该事件中执行的一段代码。
省略括号会导致表达式语句无效。

于 2013-06-05T16:21:43.390 回答
1

在编写点击函数的内联时,我们将在元素点击时以字符串的形式分配要执行的代码。

它相当于 eval('someFunction()'); 我们不能在 click='someFunction' 上写,因为它相当于 eval('someFunction') 什么都不做。如果您打算将点击处理程序绑定到锚标记,请不要忘记将 href='#' 属性添加到锚标记。

与锚标记相比,将点击处理程序分配给 span 或 div 没有区别。

于 2013-06-05T16:31:35.043 回答