我是javascript的新手,所以请反对我。
我有一些代码可以让用户有一点时间从基本菜单到达子菜单。 我的问题是代码继续以奇怪的顺序执行。
以下是代码:
function onFocusOut() {
var tester = 0;
setTimeout(function(){menuReset(tester)},1000);
}
function menuReset(tester) {
var hoverCheck = function (event) {
alert("#navBase a has focus"); //is fired, but to late...
var tester = event.data.varTester;
var tester = 1;
};
jQuery('#navBase').on('mousemove', 'a', { varTester: tester }, hoverCheck);
jQuery('#navBase').off('mousemove', 'a', { varTester: tester }, hoverCheck);
alert(tester); //This keeps firing first, before the alert in hoverCheck
if(tester == 1){
alert("tester = 1");
return;
}
else {
jQuery('#navBase ul').hide();
jQuery('#navBase').css({'width': ''});
jQuery('#navBaseAnchor').css({
'width': '', 'color': '',
'font-size': '',
'border-bottom-style': '',
'border-bottom-width': '',
'border-bottom-color': ''});
tester = 0;
}
}
现在,在执行hoverCheck功能之前,我一直收到“tester”为0的警报(应该将“tester”设置为1)并在该功能中触发警报。
有人能告诉我我做错了吗?
答案 0 :(得分:1)
我对JS也很新,但你是否也应该注意变量范围错误呢?
您已在tester
和onFocusOut()
中本地声明menuReset(tester)
,然后将其称为全局变量外部?
- LOCAL - 是那些特定于某个功能并且仅对其起作用的那些。
- GLOBAL - 是那些未在函数中定义的函数,也可能是函数函数,除非函数没有要求函数 变量
答案 1 :(得分:1)
没关系...
我找到了解决这个问题的方法。
目前我正在为.focus()
上涉及的锚点设置mouseOver
。 (当然blur()
上的mouseleave
)
然后使用document.activeElement
检查当前聚焦的元素真的很容易。
所以问题解决了,尽管有点不同。
答案 2 :(得分:0)
alert(tester)
是执行您注意为用户的第一行代码。两个函数调用jQuery().on()
和jQuery().off()
仅附加事件处理程序。如果要在警报中看到“1”,则必须在执行hoverCheck
之前快速移动鼠标。但是你可能不会比JavaScript到达下一行更快地移动你的手,alert()
tester
等于“0”。
答案 3 :(得分:-1)