Firefox无法将焦点设置为文本区域

时间:2016-03-22 20:30:11

标签: javascript firefox textarea paste execcommand

我有一个脚本,我捕获用户粘贴数据,操作它,然后将其插回到用户光标所在的位置。这是因为粘贴数据是HTML,用户粘贴的位置必须是textarea,它只接受纯文本。这是代码:

<textarea autofocus="true" id="editable" name="editable"></textarea>

当用户尝试粘贴某些数据时,我的代码会将粘贴重定向到隐藏的contenteditable div。这会丢失插入位置,因此在切换焦点之前,我将其保存为:

    var storedCaret = textarea.selectionStart;

稍后,在我执行必要的转换后,我尝试检索它:

    editable.focus();
    editable.setSelectionRange(storedCaret, storedCaret);
    window.setTimeout(function() {
        document.execCommand("insertHTML", false, formattedText);
    }, 50);

这适用于Chrome(49.0.2623.87米)。但令我非常沮丧的是,在Firefox(43.0.1)中,粘贴不起作用。从我的调试开始,在execCommand触发时,textarea#editable被正确选为document.activeElement,但粘贴完全失败。

jQuery是一个可以接受的解决方案,但我不想使用任何其他plguins。

1 个答案:

答案 0 :(得分:0)

对于我所处的失落和困惑的灵魂,这就是我最终的目标:

if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1)
        {
            var strLeft = textarea.value.substring(0, currentPos);
            var strRight = textarea.value.substring(currentPos, textarea.value.length);
            textarea.value = strLeft + formattedText + strRight;
        }

它包含在if中,因为insertHTML在Chrome中效果更好。它基本上保存了光标位置,然后拼接在字符串中。蛮力但有效满足我的需求。