我正在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删除问题)
答案 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/
这是你需要的吗?