2010-06-22 110 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

點擊後不關閉菜單會比較容易,但是如果鼠標離開菜單(在很短的寬限期之後)。