Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么textarea中的选择范围重置为0?_Javascript - Fatal编程技术网

Javascript 为什么textarea中的选择范围重置为0?

Javascript 为什么textarea中的选择范围重置为0?,javascript,Javascript,我有一些IMG表情符号,可以插入textarea作为它们的字符串表示。下面的脚本必须获得插入符号位置并在正确的位置插入表示,但有时它会出错并将选择范围重置为0 你可以看到它在玩示例,点击微笑和文本区域内。在文本区域内容末尾设置插入符号后,我立即重置为0 window.onload=function(){ var doc=window.doc; var smiles=doc.getElementById('chat-smiles-panel').getElementsByTagName('IMG

我有一些IMG表情符号,可以插入textarea作为它们的字符串表示。下面的脚本必须获得插入符号位置并在正确的位置插入表示,但有时它会出错并将选择范围重置为0

你可以看到它在玩示例,点击微笑和文本区域内。在文本区域内容末尾设置插入符号后,我立即重置为0

window.onload=function(){
var doc=window.doc;
var smiles=doc.getElementById('chat-smiles-panel').getElementsByTagName('IMG');
var el=doc.getElementById('chat-textarea');
for(var i=0;i

我想你知道,
el.value=(before+newText+after)清除该值并将其替换为新值,将光标移回字段的开头

我认为
setSelectionRange
之后要跨浏览器工作,该字段必须再次具有焦点。无论如何,Chrome中似乎就是这样,因为这(使用
el.focus()
)可以工作:

window.onload=function(){
var doc=window.doc;
var smiles=doc.getElementById('chat-smiles-panel').getElementsByTagName('IMG');
var el=doc.getElementById('chat-textarea');
for(var i=0;iel.focus();//我肯定你是对的,但是我还没能让代码片段做任何奇怪的事情。(Firefox)@Pointy-我错了,但我想我现在是对的。:-)我点击发送太快了。你可以在Chrome上看到问题,没有发生(对我来说)在Firefox上。OP的代码片段:如果您在字段中键入一些文本,将光标放在其中的某个位置,然后单击表情符号,它会将其插入正确的位置,但不会聚焦字段。如果您再次使用tab键聚焦字段,光标位于字段的开头。(在Firefox中,光标位于单击表情符号时的位置。)根据我上面的更改,单击一个表情符号会将其插入并在两种浏览器中的正确位置保留在字段中。如果我不想在文本区域设置焦点,则没有解决方案?我问,因为当文本区域获得焦点时,我会尝试使UI更友好地隐藏表情符号窗格。因此,当脚本在插入表情符号后设置焦点时,表情符号会显示为pannel滑走了,但它不是good@Mik-如果你找到了一种不用焦点的方法,你会回来发布一个答案,将复选标记切换到它,并点击我让我知道吗?因为那会很酷。:-)你也可以向Chromium项目提交一个问题,因为似乎可以设置没有焦点的选择。最终ly:我刚才注意到,即使使用您的原始代码,当您单击表情符号时,Edge也不会将焦点从文本区域移开,因此您希望在测试中考虑到这一点。(Edge将切换到使用Blink,这将使其行为类似于Chrome,但这是将来的事。)@T.J.Crowder,不幸的是,我没有找到其他方法,我只是改变了用户界面,删除了文本区域聚焦隐藏的面板。感谢您对解决方案的澄清!