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被显示.
是否有一个简单的事件涵盖了这个用例(或至少包含它的一些不那么可恶的事件)?
(注意:我知道有类似的结构系统可供选择 - 例如,通过提前填充选项而不是选择显示;但我不是在寻找替代建议,只是想知道是否存在是明确提出的问题的解决方案).
我不确定您打算支持哪些浏览器,但在您走得太远之前,请注意,如果您更改选择列表的内容(例如添加/更改/删除选项),IE 实际上会吞下(鼠标单击或焦点)事件,该事件将打开列表并为用户留下一个关闭的选择列表。有关详细信息,请参阅此处:http://webbugtrack.blogspot.com/2009/02/bug-487-onclickonfocus-bugs-on-select.html
我认为如果您真的觉得延迟加载会有好处...我会在初始加载时隐藏/禁用选择列表,并在渲染后触发选项的异步加载...重新启用/准备好后显示选择。
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |