检测HTML select元素是否已展开(无需手动跟踪状态)

时间:2011-05-27 19:00:15

标签: javascript

我想检测下拉是否扩大。我不想使用额外的事件处理程序进行点击/鼠标悬停等因为下拉菜单是动态的,并且由于其他原因我不能使用像jQuery live这样的东西。基本上我想要一些可以赋予任意select元素(没有其他附加事件处理程序,类等)的东西,可以给出关于它是否被扩展的真/假答案。

对于我的特定应用程序,我正在处理鼠标滚轮事件,但是当打开下拉菜单时会不想处理它们(这将覆盖浏览器默认功能)。但是,当鼠标悬停在select上但尚未打开它时,我仍然想要处理鼠标滚轮事件。

3 个答案:

答案 0 :(得分:6)

我之前看过这个,出于类似的原因。除了尝试手动跟踪它之外我永远找不到解决方案,这实际上是行不通的。有几种方法可以打开/关闭选择(下拉),例如Alt + Dn Arrow。如果用户点击浏览器外部的内容,则会关闭打开的选择。试图跟踪选择的状态是徒劳的。除非有其他人带来我在追捕时遗漏的东西,否则你必须尽可能优雅地编写它。

答案 1 :(得分:4)

即使它没有扩展,它何时聚焦?您特别要求扩展,因为您不想覆盖默认浏览器行为,但浏览器行为应该是在项目聚焦时滚动项目,即使它没有扩展,所以我会说你会成为更好地检测焦点。

如果您对此感到满意,那么您可以通过使用JQuery focus()blur()方法或{{1}来轻松检测字段何时具有焦点以及何时丢失它}和focusin()

http://api.jquery.com/focus/http://api.jquery.com/blur/

http://api.jquery.com/focusin/http://api.jquery.com/focusout/

希望有所帮助。

答案 2 :(得分:0)

也许你可以这样做:

$('#dropdown').live('click', function(){
    //bind mousewheel here
});

$('#dropdown').live('change', function(){
    //unbind mousewheel here
})