2010-06-22 84 views
0

在jQuery自动完成/菜单窗口小部件(自动完成窗口小部件基于菜单窗口小部件,这是一个尚未发布的窗口小部件),如何检测菜单外的点击? (点击菜单关闭菜单)如何检测元素的点击?

我在自定义组合框部件中添加了一个srollbar(类似于经典select元素)。问题是,在IE8中,滚动条上的mousedown被检测为在菜单之外的点击,这会关闭它,导致滚动条无用。所以,要解决这个问题,我首先要了解菜单窗口小部件的工作原理。

回答

0

You can view the source here,它基本上只是检查时,它的blur事件触发,后藏匿150秒,如果点击菜单中的部分不是:

.bind("blur.autocomplete", function(event) { 
    clearTimeout(self.searching); 
    // clicks on the menu (or a button to trigger a search) will cause a blur event 
    self.closing = setTimeout(function() { 
    self.close(event); 
    self._change(event); 
    }, 150); 
}); 

自动完成的其他领域,例如选择菜单本身可以清除这个超时,防止隐藏......由其他事物引起的模糊不会导致隐藏。值得注意的是,这不是复制行为的方式,有防止冒泡的更好方法,但是如果你的目标是明确地理解这个小部件......那么它就是这样:)

+0

谢谢。我不是想复制这种行为,而是想知道它是如何工作的。我已经扩展它,并使用溢出CSS属性添加(与其他东西)一个滚动条。现在,在Firefox中,滚动条上的点击被识别为菜单的一部分,并且关闭超时被取消。所以它工作。在IE8中,菜单滚动条中的鼠标事件不会被识别为小部件的一部分,并且菜单在150 ms后关闭。任何想法如何解决这个问题(不重写自动填充小部件代码本身)? – 2010-06-22 11:32:43

+0

好的...我从jquery-ui 1.8.1更新到1.8.2,并且解决了这个问题。无论如何,我很高兴今天学到了一些东西。但没时间进一步调查究竟发生了什么变化! – 2010-06-22 12:10:29

0

点击后不关闭菜单会比较容易,但是如果鼠标离开菜单(在很短的宽限期之后)。