我有一个 SELECT 元素,其内容(OPTION 元素)通过 AJAX 加载并在准备就绪时插入,并且在更改不同的 SELECT 时插入。两个 SELECTS 都有两个 OPTION 元素附加到通过 AJAX 加载的列表中:
<option disabled="disabled"></option>
<option value="edit">Edit…</option>
我已经准备好以下 jQuery 事件绑定:
$('#theSelect').bind('change click', handleSelection);
然后,该handleSelection()
方法拦截正在选择的“编辑...”选项,将选择切换回先前选择的选项,并触发显示允许用户编辑菜单中的选项的对话框的其他功能。这在 Safari 和 Chrome 中效果很好,但有一种情况在 Chrome 中不起作用:如果没有通过 AJAX 加载的选项,那么只有禁用的和“编辑...”选项可见,它不会触发选择“编辑...”选项上的事件。这似乎是因为,在 Chrome 中,默认选择“编辑...”选项(因为它是第一个启用的选项;另一方面,Safari 选择禁用的选项,因为它是第一个选项)并且它只会触发更改 SELECT 元素的事件,而不是点击(为什么我同时听点击和更改),但是当“编辑...”已经被选中时,它实际上并没有改变,所以不会触发事件。
那么,我该如何解决这个问题?我是否需要拦截所有焦点事件并做脏活来解释发生了什么?有没有办法让 Chrome 选择禁用的选项而不是“编辑...”?