【发布时间】:2017-01-09 04:23:18
【问题描述】:
我一直在尝试使选择元素无法聚焦。多个消息来源建议将tabIndex 设置为-1。这是我尝试过的,但失败了。
考虑以下示例:
function addEv(id, event, message)
{
document.getElementById(id).addEventListener(event, function(){
document.getElementById('console').innerHTML = message;
});
}
addEv('select', 'focus', 'select focus');
addEv('select', 'blur', 'select blur');
addEv('span', 'focus', 'span focus');
addEv('span', 'blur', 'span blur');
addEv('select-wrapper', 'focus', 'div focus');
addEv('select-wrapper', 'blur', 'div blur');
#select-wrapper {
display: inline-block;
padding: 1px;
border: 1px solid transparent;
}
#select-wrapper:focus {
border: 1px solid;
border-radius: 5px;
outline: none;
}
<input type="text" value="3 glasses">
<div id="select-wrapper" tabindex="0">
<span id="span">of</span>
<select id="select" tabindex="-1">
<option value="beer">Beer</option>
<option value="wine" selected>Wine</option>
<option value="vodka">Vodka</option>
</select>
</div>
<input type="button" value="drink">
<div id="console"></div><br>
如果您浏览元素,一切都会按预期工作。两个输入元素和 div 元素获得焦点。单击显示“of”的跨度也是如此。但是,如果您单击选择元素,它将获得焦点而不是 div。这意味着错误的焦点事件会被触发,并且选择元素的视觉效果会随着它被聚焦而改变。这在 Firefox 和 Chrome 中是一致的,所以我认为这是故意的。
问题是:如何使选择元素无法聚焦,而使围绕它的 div 成为焦点?当然,我仍然希望能够打开下拉菜单并选择一个选项。
【问题讨论】:
-
tabindex仅在您在元素之间切换而不是在click上时有效 -
css 有一个
pointer-events属性可能会有所帮助 -
@JaromandaX 使用
pointer-events: none;使选择元素无法使用,因为我不能再选择任何东西了。否则,这当然是一个完美的解决方案。 -
那我一定不明白你想要什么
-
如果无法聚焦选择,则无法“打开”
标签: javascript html drop-down-menu focus tabindex