在jQuery中,您可以通过在mousedown处理程序中使用event.preventDefault来阻止<select>
打开它的下拉菜单。允许您在保留表单元素的原始样式的同时用其他内容替换下拉列表。
这在Chrome和MSIE中运行良好,但在FireFox和Opera中,无论如何都会显示下拉列表。 (未在Safari上测试)
select元素应该看起来已启用,仍然会像启用一样响应所有用户交互,但不应呈现下拉列表。相反,下拉列表将被自定义渲染的内容替换,例如包括颜色样本,图标或字体,但“自定义下拉列表”部分已在我的项目中完成。
有没有人知道如何在所有*浏览器中使用它。
答案 0 :(得分:10)
$(function() {
$('select').on('focus', function(e) {
this.blur();
window.focus();
});
});
至少在Firefox中运行,但似乎无法在Chrome中运行?
修改强>
我无法想出一种检测一种方法是否有效的方法,所以有些浏览器会嗅探。这不是最好的方法,但我能想到的最好的方法,它似乎在我测试过的浏览器中有效:
$(function() {
$('select').on('focus mousedown', function(e) {
if ($.browser.webkit||$.browser.msie) {
e.preventDefault();
}else{
this.blur();
window.focus();
}
});
});
答案 1 :(得分:1)
你的这个
//e.stopPropagation works only in Firefox.
if (event.stopPropagation) {
event.stopPropagation();
event.preventDefault();
}
答案 2 :(得分:0)
这在大多数情况下都适用于点击和焦点(带标签):
$('select').on('focus mousedown', function(e){
e.stopPropagation();
e.preventDefault();
this.blur();
window.focus();
});
答案 3 :(得分:0)
这是一个众所周知的错误:https://bugzilla.mozilla.org/show_bug.cgi?id=392863
它目前在firefox ESR32中。
如果像我一样,您的自定义HTML / Javascript选项下有隐藏 <select>
,但仍希望保持关注隐藏{{1} }(对于辅助功能,选项卡导航,箭头,输入...)。
只需使用<select>
。
z-index: -1
答案 4 :(得分:0)
禁用未选中的元素(选项)。
$('select option:not(:selected)')。attr(“disabled”,true);