2011-05-06 89 views
0

我正在textarea中实现标记插入。一切都很好。Textarea替换Firefox中的scrollHeight

但是。
在Firefox中,如果文本高度大于textarea,则会出现滚动条。标签更换后,它跳转到文本区域的乞讨。所有其他浏览器保持在更换发生的地方。
是否有可能在Firefox中做到这一点?

IE有自己的实现。 Firefox,Opera和Chrome使用

var len = textarea[0].value.length 
var start = textarea[0].selectionStart; 
var end = textarea[0].selectionEnd; 
var sel = textarea[0].value.substring(start, end); 
var replace = chooseTags(sel, tag) // returns "[tag]sel[/tag]" 
textarea[0].value = textarea[0].value.substring(0,start) + replace + textarea[0].value.substring(end,len); 

Opera和Chrome不会更改滚动高度。但Firefox将其取消。我怎样才能防止这一点?

(textarea的[0]的使用,因为歌剧具有textarea.val问题()的\ r缺失)

+0

你能否在[jsFiddle](http://www.jsfiddle.net)上重做这个行为的测试用例? – mekwall 2011-05-06 07:36:19

+0

这里是http://jsfiddle.net/49vsr/4。 Chrome停留,FF跳转。 – Qiao 2011-05-06 08:04:40

回答

0

这似乎是在Firefox的错误。你可以解决它通过节省textarea当前scrollTop值并添加标签后恢复:

var scTop = textarea[0].scrollTop, 
    len = textarea[0].value.length, 
    start = textarea[0].selectionStart, 
    end = textarea[0].selectionEnd, 
    sel = textarea[0].value.substring(start, end), 
    replace = chooseTags(sel, tag); // returns "[tag]sel[/tag]" 

// Add tag 
textarea[0].value = textarea[0].value.substring(0,start)+ 
        replace+ 
        textarea[0].value.substring(end,len); 
// Restore scrollTop 
textarea[0].scrollTop = scTop; 
0

您必须添加return判决之前如下:

textarea[0].setSelectionRange(end + 7, end + 7); 
// 7 is the total length of the text tags that have been added 
textarea[0].focus(); 

它为我在你的jsfiddle的修改版本中:http://jsfiddle.net/carlesandres/WTQMa/1/

这是你所需要的吗?

+0

不适合我。跳起来。 FF3.6 – Qiao 2011-05-06 08:28:37