【问题标题】:Placing focus on selected text in div FF将焦点放在 div FF 中的选定文本上
【发布时间】:2023-04-01 09:49:01
【问题描述】:

我想自动选择一段文本,以便用户可以使用 ctrl + c 将其复制到剪贴板。
为了做到这一点,我将一些事件处理程序附加到几个输入和几个 div(使用tabindex="0")。
但是,如果我使用 javascript 选择一段文本,浏览器会指示选择,但会将焦点保持在输入上。
如果我尝试实现相同的目标,但使用 div 作为触发器,它会起作用。
此行为仅在 FireFox 中。

在我的jsfiddle(或下面的 sn-p)中,将焦点放在第一个输入上,按随机键(选择文本),然后尝试将其复制粘贴到下方的输入中。
然后尝试做同样的事情,但点击 div。 (点击 div 也会选择文本)。

var input = document.getElementById("my-input");
input.addEventListener("keydown", function(evt){
    selectText(document.getElementById("selectme"));
});

var div = document.getElementById("clickme");
div.addEventListener("click", function(evt){
    selectText(document.getElementById("selectme"));
});

var selectText = function(element){
    var range, selection;
    if(document.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(element);
        range.select();
    } else if(window.getSelection) {
        selection = window.getSelection();
        range = document.createRange();
        range.selectNodeContents(element);
        selection.removeAllRanges();
        selection.addRange(range);
    }
    element.focus();
}
<input id="my-input"/>
<div id="selectme">Texttexttexttext</div>
<div tabindex="0" id="clickme">CLICK ME</div>
<input />

【问题讨论】:

    标签: javascript firefox focus selection


    【解决方案1】:

    如果你先调用evt.target.blur();,输入将在聚焦div之前失去焦点。

    您的函数将如下所示:

    var input = document.getElementById("my-input");
    input.addEventListener("keydown", function(evt){
        evt.target.blur();
        selectText(document.getElementById("selectme"));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多