Javascript 如何中止退出jqueryui菜单?

Javascript 如何中止退出jqueryui菜单?,javascript,jquery,html,jquery-ui,firefox,Javascript,Jquery,Html,Jquery Ui,Firefox,我想阻止一个世界的衰落 相同的上下文:Firefox43,Linux/Debian/Sid,Jquery2.2,JqueryUI1.11.4,作为问题;alpha stage,Linux/Debian上的GPL免费软件,Linux上最近的Firefox 38或43;这是承诺 (问题末尾的JSFIDLE MVCE示例) 在我的文件中,我有一个全局变量mom\u menucmdel,它包含一个JqueryUI菜单(一个下拉菜单)。mom\u removecmdmenu函数将清除该全局菜单并从DOM中

我想阻止一个世界的衰落

相同的上下文:Firefox43,Linux/Debian/Sid,Jquery2.2,JqueryUI1.11.4,作为问题;alpha stage,Linux/Debian上的GPL免费软件,Linux上最近的Firefox 38或43;这是承诺

(问题末尾的JSFIDLE MVCE示例)

在我的文件中,我有一个全局变量
mom\u menucmdel
,它包含一个JqueryUI菜单(一个下拉菜单)。
mom\u removecmdmenu
函数将清除该全局菜单并从DOM中删除该菜单

如果用户不进行任何交互,我希望此菜单淡出并在9秒多一点的时间内删除。但是如果用户在菜单中移动鼠标,我希望淡出中止。所以我编码:

 var curmenu = mom_menucmdel;
 curmenu.mousemove
 (function(ev)
  { console.log("momdelayrepl movefinishing ev=", ev, " curmenu=", curmenu);
    curmenu.finish();
  });
 setTimeout(function()
            {
                console.log("mom_cmdkeypress-delayedreplmenudestroy curmenu=",
                            curmenu);
                curmenu.delay(100).fadeOut(800+75*dollvalseq.length,
                                      function () {
                                          console.log ("momdelayrepl finalfaderemove curmenu=", curmenu);
                                          mom_removecmdmenu();
                                      });
            }, 9500);
在nanoedit.js的第427行附近;我的理解是,
finish
将中止动画。但它不起作用。即使在鼠标移动之后,淡入淡出的颜色仍会保留,菜单也会消失

如果你有足够的勇气编译熔化监视器,浏览,在文本earea中键入$e,然后按esc键


JSFIDLE示例(MVCE) 看哪一个是上述的简化变体;运行两次。首先,点击按钮并至少等待10秒钟。菜单正在淡出并消失。然后,再次运行它,点击按钮,并在菜单内移动鼠标(甚至可能选择某个项目),菜单仍然会在大约10秒钟内消失,但我希望它保持不变,可能是无限期的(在我的
nanoedit.js
code中,
select
函数会将其删除,在这个JSFIDLE中我不在乎)

var-mymenu;
var-mybutton;
var计数=0;
瓦尔·梅努托;
函数删除菜单(){
如果(!mymenu)返回;
log(“删除mymenu=,mymenu”);
mymenu.remove();
}
功能淡出菜单(){
log(“淡入我的菜单=,我的菜单”);
我的菜单。延迟(100)。淡出(900,删除菜单);
}
$(文档).ready(函数(){
mybutton=$(“#mybutton_id”);
mybutton.on(“单击”,函数(){
计数++;
var menuid=“menuid”+计数;

$(“#mymenudiv_id”).append(当鼠标移动时,接受的答案将不必要地创建和清除大量超时

您可以使用内置菜单事件并更好地处理此问题,如下所示:

mymenu.menu({
重点:功能(e、ui){
clearTimeout($(this.data('timeout'));
}
});
mymenu.on('menublur',函数(e,ui){
var timeout=setTimeout(函数(){
log(“淡出我的菜单”);
}, 5000);
$(this).data('timeout',timeout);
});
mymenu.trigger('menublur');//第一次启动超时
menublur
是一个内部(有文档记录的)jquery ui事件,当菜单项失去焦点时触发

请注意,我们应该使用
on()
方法在options对象之外绑定要手动触发的事件


谢谢你指出了一个更好的答案。的确,这个方法比我的答案更好。