我遇到了一个关于HTML渲染的问题。
在IE7的dir="rtl"文档中,当JavaScript尝试将焦点设置到一个DIV元素(使用oElement.focus()方法)时,渲染会变得混乱。由于上下文非常复杂,因此我认为最简单的解决方法是使DIV不可聚焦?
有没有办法让一个DIV元素无法获得焦点?
我遇到了一个关于HTML渲染的问题。
在IE7的dir="rtl"文档中,当JavaScript尝试将焦点设置到一个DIV元素(使用oElement.focus()方法)时,渲染会变得混乱。由于上下文非常复杂,因此我认为最简单的解决方法是使DIV不可聚焦?
有没有办法让一个DIV元素无法获得焦点?
<div>
元素不应该能够获得焦点,除非你添加了 tabIndex 属性。
如果你已经添加了 tabIndex
,可以通过以下方式将其删除:
document.getElementById("yourElement").removeAttribute("tabIndex");
contenteditable="true"
的 div 元素也可以获得焦点。 - thdoan另外,如果你想将一个可聚焦的元素(如表单输入元素等)设置为不可聚焦,你可以设置:
tabIndex = "-1"
document.getElementById("yourElement").setAttribute("tabIndex", "-1");
我不确定你是否可以使一个元素“无法聚焦”,但是你肯定可以在特定的时间点使用它的blur
方法取消聚焦:
document.getElementById("myElement").blur();
编辑:
我认为你可以通过在每次元素被聚焦时取消其聚焦来使元素“无法聚焦”。您可以通过以下方式实现:
document.getElementById("myElement").onfocus = function() {
this.blur();
};
...或者(在HTML中使用内联Javascript):
<div onfocus="this.blur();"></div>
史蒂夫
以下是使用jQuery使DIV无法聚焦的一些方法。
// Set the tabindex atribute to -1.
1)$("divid").attr('tabindex','-1');
// Remove the tabindex atribute if exists.
2) $("divid").removeAttr('tabindex');
// This is third way.
3) $("divid").blur();
这是我过去项目中的一个纯CSS解决方案
/* Prevents all mouse interactions */
.disabled-div {
opacity: 0.5;
pointer-events: none;
}
/* Prevents all other focus events */
.disabled-div:focus,
.disabled-div:focus-within {
visibility: hidden;
}
<h1>CSS Only Disable with Prevent Focus</h1>
<input placeholder="Normal text field">
<br><br>
<input class="disabled-div" placeholder="Disabled text field">
<br><br>
<input placeholder="Normal text field">
<br><br>
<input class="disabled-div" placeholder="Disabled text field">
<br><br>
当它接收到焦点时会稍微闪烁。这是因为当它接收到焦点时,可见性被设置为“隐藏”,然后失去焦点并将可见性重新设置为“可见”。实际上,这是好的,因为用户现在可以在禁用字段上移动时知道焦点所在的位置...
可以通过添加CSS轻松解决:
div_selector{
pointer-events: none;
}