是否有JavaScript"选择框显示"事件或类似的东西?(使用jQuery)

Ben*_*Lee 6 javascript jquery html-select

我有一个HTML选择:

<select>
    <option>Choose one</option>
</select>
Run Code Online (Sandbox Code Playgroud)

使用jQuery,当我显示选择选项列表时,是否有可以捕获的事件?(我需要这个的原因是因为我想推迟列表的填充,直到需要向用户显示列表的那一刻).

mousedown 适用于他们点击它时,但如果他们选中它并按回车键则不会做任何事情.

focus也适用于点击,几乎适用于标签,但它立即触发标签,而不是等到他们按Enter键显示选项列表.(这是一个问题,因为如果他们选中它然后选项卡而不按Enter键,我不希望事件触发).

我甚至想出了这个可憎的事:

var select_reveal = function(ev) { ... }
$('select').on('mousedown', select_reveal).on('keydown', function(ev) {
    // character code 9 is tab
    if (ev.which !== 9) select_reveal.bind(this)(ev);
});
Run Code Online (Sandbox Code Playgroud)

这实际上似乎有效.它甚至适用于键入字母的情况(它填充列表然后跳转到以该字母开头的第一个选项).但正如我所说,这有点令人厌恶.只是检查"tab"作为例外也有点hacky - 肯定有其他例外不会导致select被显示.

是否有一个简单的事件涵盖了这个用例(或至少包含它的一些不那么可恶的事件)?

(注意:我知道有类似的结构系统可供选择 - 例如,通过提前填充选项而不是选择显示;但我不是在寻找替代建议,只是想知道是否存在是明确提出的问题的解决方案).

scu*_*ffe 4

我不确定您打算支持哪些浏览器,但在您走得太远之前,请注意,如果您更改选择列表的内容(例如添加/更改/删除选项),IE 实际上会吞下(鼠标单击或焦点)事件,该事件将打开列表并为用户留下一个关闭的选择列表。有关详细信息,请参阅此处:http://webbugtrack.blogspot.com/2009/02/bug-487-onclickonfocus-bugs-on-select.html

我认为如果您真的觉得延迟加载会有好处...我会在初始加载时隐藏/禁用选择列表,并在渲染后触发选项的异步加载...重新启用/准备好后显示选择。