我正在尝试将所有较旧的代码转换为使用箭头功能...
以下作品:
$p_worklist.mouseover (()=> {
closemenues();
console.log ("Show Worklist");
$div_worklistmenu.show();
});
但这不是
$p_worklist.mouseover =()=> {
closemenues();
console.log ("Show Worklist");
$div_worklistmenu.show();
};
不同之处在于,第一个函数将主体包裹在括号中,而第二个函数不但将第一个括号替换为等号并消除第二个函数。
尝试学习... 谢谢
答案 0 :(得分:3)
第一个是调用 $p_worklist.mouseover
,并传入一个函数。然后,jQuery将执行设置事件侦听器所需的任何内部代码,并且当发生鼠标悬停时,它将调用您提供给它的函数。
第二个是分配到$p_worklist.mouseover
,从而用您创建的功能覆盖过去的内容。没有运行其他代码,也没有设置事件侦听器。
jQuery的api希望您调用它,因此方法1是正确的选择。
答案 1 :(得分:2)
在第一个示例中,您调用mouseover方法,在下一个示例中,您只是覆盖了该方法而没有调用
答案 2 :(得分:1)
问题不在于箭头功能,而是您使用mouseover
属性来设置事件侦听器。
在JQuery中(假设您使用的是$
,我假设您正在使用),mouseover
是一个函数,它需要另一个函数作为参数。因此,您将完全像您一样传递匿名箭头功能。
但是,在普通JavaScript中,mouseover
属性是指向要作为事件侦听器调用的函数的指针。
如果您使用的是JQ:
$('selector').mouseover(() => {
// ...
});
如果您使用的是JS:
element.mouseover = event => {
// ...
}
当然,您可以使用setter来覆盖JQuery方法,但这可能不是您想要的。
答案 3 :(得分:1)
mouseover()
是jQuery方法。像所有jQuery事件处理方法一样,它以handler函数作为参数,因此您必须调用该方法。
当您分配给$p_worklist.mouseover
时,您将使用新函数替换该方法,而不是调用该方法。这不是在jQuery中绑定事件处理程序的方式。
您将jQuery方法调用与DOM onXXX
属性混淆,在其中编写了类似
element.onmouseover = ()=> {
closemenues();
console.log ("Show Worklist");
$div_worklistmenu.show();
};