尽管在其他地方单击,但仍保持文本字段的焦点
Keep a text field focused despite clicking elsewhere
尽管单击了红色 div,我仍希望保持文本字段的焦点。我尝试了不同的方法,为什么没有效果?
function stopEvent(e) {
e.stopPropagation();
e.preventDefault();
return false;
}
function setFocus(e) {
document.getElementById("textField").focus();
stopEvent(e);
}
document.getElementById("textField").focus();
<div onmouseover="setFocus(event);" onfocus="this.blur();">
<div style="background-color:red; height:100px;" onclick="stopEvent(event)" onfocus="this.blur();">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
如果您希望它始终处于焦点状态,只需添加 document.getElementById("textField").addEventListener('blur',() => document.getElementById("textField").focus())
。
document.getElementById("textField").focus();
document.getElementById("textField").addEventListener('blur',() =>
document.getElementById("textField").focus())
<div>
<div style="background-color:red; height:100px;">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
如果你想在点击红色 div 时重新聚焦,只需将 'click' 事件侦听器添加到 redDiv。
window.textField.focus();
window.redBox.addEventListener('click',() => window.textField.focus())
<div>
<div id="redBox" style="background-color:red; height:100px;">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
您在点击区域使用了 stopEvent 而不是 setFocus div。此外,您在 setFocus 中没有 return false,因此 stopEvent 中的 return false 没有用。
function stopEvent(e) {
e.stopPropagation();
e.preventDefault();
return false;
}
function setFocus(e) {
document.getElementById("textField").focus();
return stopEvent(e);
}
document.getElementById("textField").focus();
<div onmouseover="setFocus(event);" onfocus="this.blur();">
<div style="background-color:red; height:100px;" onclick="setFocus(event)" onfocus="this.blur();">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
你可以做到这一点
const field = document.getElementById("textField");
field.addEventListener("blur", function( event ) {
setTimeout(function () {
field.focus();
}, 100);
}, true);
<div style="background-color:red; height:100px;">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
尽管单击了红色 div,我仍希望保持文本字段的焦点。我尝试了不同的方法,为什么没有效果?
function stopEvent(e) {
e.stopPropagation();
e.preventDefault();
return false;
}
function setFocus(e) {
document.getElementById("textField").focus();
stopEvent(e);
}
document.getElementById("textField").focus();
<div onmouseover="setFocus(event);" onfocus="this.blur();">
<div style="background-color:red; height:100px;" onclick="stopEvent(event)" onfocus="this.blur();">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
如果您希望它始终处于焦点状态,只需添加 document.getElementById("textField").addEventListener('blur',() => document.getElementById("textField").focus())
。
document.getElementById("textField").focus();
document.getElementById("textField").addEventListener('blur',() =>
document.getElementById("textField").focus())
<div>
<div style="background-color:red; height:100px;">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
如果你想在点击红色 div 时重新聚焦,只需将 'click' 事件侦听器添加到 redDiv。
window.textField.focus();
window.redBox.addEventListener('click',() => window.textField.focus())
<div>
<div id="redBox" style="background-color:red; height:100px;">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
您在点击区域使用了 stopEvent 而不是 setFocus div。此外,您在 setFocus 中没有 return false,因此 stopEvent 中的 return false 没有用。
function stopEvent(e) {
e.stopPropagation();
e.preventDefault();
return false;
}
function setFocus(e) {
document.getElementById("textField").focus();
return stopEvent(e);
}
document.getElementById("textField").focus();
<div onmouseover="setFocus(event);" onfocus="this.blur();">
<div style="background-color:red; height:100px;" onclick="setFocus(event)" onfocus="this.blur();">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>
</div>
你可以做到这一点
const field = document.getElementById("textField");
field.addEventListener("blur", function( event ) {
setTimeout(function () {
field.focus();
}, 100);
}, true);
<div style="background-color:red; height:100px;">Click area</div>
<div><input id="textField" type="text" value="focused" /></div>