Firefox 无法将焦点设置到文本区域
Firefox fails to set focus to text area
我有一个脚本,用于捕获用户粘贴数据、对其进行处理,然后将其插入回用户光标所在的位置。这是因为粘贴数据是 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 m)。但令我非常沮丧的是,在 Firefox (43.0.1) 中,粘贴不起作用。根据我的调试,在 execCommand 触发时,textarea#editable
被正确选择为 document.activeElement
,但粘贴完全失败。
jQuery 是一个可以接受的解决方案,但我不想使用任何其他插件。
对于处于我这个位置的迷失和困惑的灵魂,这就是我最终要做的:
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 中工作得更好。它基本上保存光标位置,然后拼接字符串。粗暴但有效满足我的需求。
我有一个脚本,用于捕获用户粘贴数据、对其进行处理,然后将其插入回用户光标所在的位置。这是因为粘贴数据是 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 m)。但令我非常沮丧的是,在 Firefox (43.0.1) 中,粘贴不起作用。根据我的调试,在 execCommand 触发时,textarea#editable
被正确选择为 document.activeElement
,但粘贴完全失败。
jQuery 是一个可以接受的解决方案,但我不想使用任何其他插件。
对于处于我这个位置的迷失和困惑的灵魂,这就是我最终要做的:
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 中工作得更好。它基本上保存光标位置,然后拼接字符串。粗暴但有效满足我的需求。