Textarea在Firefox中替换值scrollHeight

时间:2011-05-06 07:19:38

标签: javascript jquery firefox textarea

我正在textarea中实现标签插入。一切都很好。

可是。
在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],因为Opera有textarea.val()的\ r删除问题)

2 个答案:

答案 0 :(得分:0)

这似乎是Firefox中的一个错误。您可以通过保存scrollTop的当前textarea值来解决此问题,并在添加标记后将其恢复:

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;

答案 1 :(得分: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/

这是你需要的吗?