在jQuery自動完成/菜單窗口小部件(自動完成窗口小部件基於菜單窗口小部件,這是一個尚未發佈的窗口小部件),如何檢測菜單外的點擊? (點擊菜單關閉菜單)如何檢測元素的點擊?
我在自定義組合框部件中添加了一個srollbar(類似於經典select元素)。問題是,在IE8中,滾動條上的mousedown被檢測爲在菜單之外的點擊,這會關閉它,導致滾動條無用。所以,要解決這個問題,我首先要了解菜單窗口小部件的工作原理。
在jQuery自動完成/菜單窗口小部件(自動完成窗口小部件基於菜單窗口小部件,這是一個尚未發佈的窗口小部件),如何檢測菜單外的點擊? (點擊菜單關閉菜單)如何檢測元素的點擊?
我在自定義組合框部件中添加了一個srollbar(類似於經典select元素)。問題是,在IE8中,滾動條上的mousedown被檢測爲在菜單之外的點擊,這會關閉它,導致滾動條無用。所以,要解決這個問題,我首先要了解菜單窗口小部件的工作原理。
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);
});
自動完成的其他領域,例如選擇菜單本身可以清除這個超時,防止隱藏......由其他事物引起的模糊不會導致隱藏。值得注意的是,這不是你複製行爲的方式,有防止冒泡的更好方法,但是如果你的目標是明確地理解這個小部件......那麼它就是這樣:)
點擊後不關閉菜單會比較容易,但是如果鼠標離開菜單(在很短的寬限期之後)。
謝謝。我不是想複製這種行爲,而是想知道它是如何工作的。我已經擴展它,並使用溢出CSS屬性添加(與其他東西)一個滾動條。現在,在Firefox中,滾動條上的點擊被識別爲菜單的一部分,並且關閉超時被取消。所以它工作。在IE8中,菜單滾動條中的鼠標事件不會被識別爲小部件的一部分,並且菜單在150 ms後關閉。任何想法如何解決這個問題(不重寫自動填充小部件代碼本身)? – 2010-06-22 11:32:43
好的...我從jquery-ui 1.8.1更新到1.8.2,並且解決了這個問題。無論如何,我很高興今天學到了一些東西。但沒時間進一步調查究竟發生了什麼變化! – 2010-06-22 12:10:29