2010-11-17 78 views
1

我實現了使用HTML,CSS和JavaScript的自定義下拉菜單。它現在運行良好,但我現在對「模糊」的方式並不滿意。當您打開列表,然後單擊其他地方時,它應該崩潰。我所做的是在展開列表之後向window添加事件偵聽器(mousedown),並在合攏後刪除偵聽器。該事件基本上使用target檢查DOM事件是否發生在正確的元素上,如果沒有,則模糊下拉控件。針對HTMLDivElement的焦點和模糊事件?

我知道focusblur。但是,他們似乎只是在表單元素上工作,我覺得這很容易理解。他們還支持其他場景,比如「甩開」。

無論如何,我在問你是否有更好的方式來做我現在正在做的事情。我所做的只是感到愚蠢。

回答

1

也許你可以有一個虛擬的輸入和焦點,當控制活動。然後觀看模糊並關閉列表。它不能是display:none,但可能是opacity:0,或者只是在視野外。

+0

唯一的問題是,如果你點擊實際的下拉列表,它會模糊輸入,並認爲它應該摺疊下拉。或者你的意思是我設置了一個點擊監聽程序,該列表的preventDefault()? – Tower 2010-11-17 17:48:02

+0

是的,這是真的。您可能需要查看模糊的目標是否是控件本身,而不是停止事件。 – 2010-11-17 18:15:03

0

我所做的是使用鼠標關閉我的自定義列表。我在我的下拉菜單週圍創建了一個邊界框。該盒子附有鼠標事件,當鼠標移出鼠標時,該鼠標關閉下拉菜單。通過這種方式,您可以在列表之外添加一些填充,這樣可以爲用戶提供更好的功能,然後在基本列表中將鼠標移出。

如果你想使用點擊事件來做到這一點,我會有一個全局函數,就像你已經設置好的那樣,並且在頁面上的任何點擊事件中調用該函數。