Javascript 按下按钮时,如何使元件不失去焦点?

Javascript 按下按钮时,如何使元件不失去焦点?,javascript,jquery,html,focus,selection,Javascript,Jquery,Html,Focus,Selection,我有一个文本区域,在其中插入插入符号位置的内容(感谢)。它在用户按下按钮时插入内容。但当按下按钮时,文本区域的焦点似乎消失了。如果插入符号的位置相同,我如何保持焦点在那里?我一直在考虑使用evt.preventDefault()和.focusout()。如果有帮助的话。您不能阻止焦点移动到可聚焦的元素,并且仍然允许鼠标单击具有其正常行为(例如,单击按钮)。如果单击支持焦点的元素(如按钮),它将获得键盘焦点 如果操作正确,可以通过编程将焦点放回元素上。如果做得不好,可能会破坏页面的可用性 演示:当

我有一个文本区域,在其中插入插入符号位置的内容(感谢)。它在用户按下按钮时插入内容。但当按下按钮时,文本区域的焦点似乎消失了。如果插入符号的位置相同,我如何保持焦点在那里?我一直在考虑使用
evt.preventDefault()
.focusout()
。如果有帮助的话。

您不能阻止焦点移动到可聚焦的元素,并且仍然允许鼠标单击具有其正常行为(例如,
单击按钮)。如果单击支持焦点的元素(如按钮),它将获得键盘焦点

如果操作正确,可以通过编程将焦点放回元素上。如果做得不好,可能会破坏页面的可用性


演示:

当按钮单击功能结束时,您可以通过编程方式将焦点重新应用到文本区域,从而轻松完成此操作。通过这种方式,您可以在每次单击事件时重新获得焦点。

无需更新焦点。

确保处理mousedown事件(而不是click事件)。 mousedown事件将在另一个元素的焦点丢失之前触发

mousedown事件处理程序中,需要防止事件默认行为

e.preventDefault(); // on your mousedown event

按下按钮时,您必须重新对焦

HTML代码:

<input id="messageBox" autofocus />
<input type="button" id="messageSend" onclick="setFocusToMessageBox()" value="Send" />

Javascript代码:

<script>
function setFocusToMessageBox(){
    document.getElementById("messageBox").focus();
}
</script>

函数setFocusToMessageBox(){
document.getElementById(“messageBox”).focus();
}

你能告诉我怎么做吗?对不起,我不知道。@think123-我在我的答案后面添加了一个工作演示。回答得好。尽管如此,我发现
unselectable=“on”
似乎也能起作用,至少对于按钮@jfriend00@think123,如果您在mousedown中使用
.preventDefault()
,您完全可以停止焦点移动到可聚焦的元素。点击刚好太迟了,因为鼠标向下移动后,焦点已经丢失。您可以在自己的演示中验证这一点,方法是在释放之前按住鼠标按钮一段时间:当您第一次向下鼠标时,焦点将丢失;发布后,单击事件将触发。@Han,如果您将注释添加为答案,这将很好,这对我有很大帮助,但似乎不是每个人都在阅读注释。这会产生防止触发的副作用:active我已更新代码示例,以显示:active选择器仍按预期工作。也许我错过了什么?请更详细地解释您的问题或提供代码示例。谢谢只要保持鼠标点击按钮。您将看到该按钮:未应用活动样式。(Firefox 76)你是对的。在Chrome中,它很好-我已经更新了我的答案。它对我很好,谢谢!只是一个警告:这是一个mousedown事件,而不是click事件!我没有仔细阅读,花了一些时间使它起作用。只是为了确保这不会发生在你身上:)