是否存在JavaScript“;选择框显示”;事件或类似的事情?(使用jQuery)
Is there a JavaScript "select box reveal" event or something like it? (using jQuery)
我有一个html选择:
<select>
<option>Choose one</option>
</select>
使用jQuery,当选择选项列表被显示时,是否有一个事件可以被我捕获?(我需要这样做的原因是,我想将列表的填充推迟到需要向用户显示列表的那一刻)。
当他们点击它时,mousedown
起作用,但如果他们点击它并按enter键,则不会执行任何操作。
focus
也适用于单击,几乎适用于选项卡到它,但它会在选项卡到它时立即启动,而不是等到他们按下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);
});
这似乎确实有效。它甚至适用于他们键入字母表的情况(它填充列表,然后跳到以该字母开头的第一个选项)。但正如我所说,这有点令人憎恶。仅仅将"tab"作为异常进行检查也有点麻烦——肯定还有其他异常不会导致选择被显示。
有没有一个简单的事件覆盖了这个用例(或者至少有一些不那么令人讨厌的事件覆盖它)?
(注意:我知道这样构建系统有其他选择——例如,在选项发生变化时提前填充选项,而不是在选择显示上;但我并不是在寻找其他建议,只是想知道是否有明确提出的问题的解决方案)
我不确定你打算支持哪些浏览器,但在你走得太远之前,请注意,如果你更改选择列表的内容(例如添加/更改/删除选项),IE实际上会吞下(鼠标点击或聚焦)事件,该事件会打开列表,并给用户留下一个关闭的选择列表。有关详细信息,请参见此处:http://webbugtrack.blogspot.com/2009/02/bug-487-onclickonfocus-bugs-on-select.html
我认为,如果你真的觉得推迟装载会有好处。。。我会在初始加载时隐藏/禁用选择列表,并在渲染后触发选项的异步加载。。。准备就绪时重新启用/显示选择。
- jQuery使用anoSlide在手机上滑动
- jQuery使用api获取typeform结果
- JQuery使用相同的功能自动完成各种输入文本
- jQuery:使用“jQuery验证”后无法提交表单's远程验证
- jQuery使用ajax自动完成问题-TypeError:this.source不是函数
- jQuery:使用substr()的另一种方法
- 我如何让jQuery使用Greasemonkey 0.8脚本(在Firefox 2上),在没有互联网的情况下使用PC
- jquery使用name from变量按类选择元素
- JQuery:使用clone()生成的元素不采用原始的事件属性
- jQuery使用$.post上传文件
- 如何将数据附加到DOM元素以供jQuery使用
- jquery使用val()复制值似乎可以删除换行符
- jQuery使用.of()删除事件处理程序时出现的问题
- jquery使用输入框内容
- jQuery:使用实时事件添加tabindex属性
- Jquery使用html对象添加更多内容
- jQuery 使用 .scroll(handler) 滚动到元素
- PHP jQuery使用多个单词传递值
- 防止已选择的选项 Jquery 使用 MYSQL 自动完成
- jQuery使用XML数据更新UL列表