#javascript #jquery #firefox #textarea
#javascript #jquery #firefox #текстовое поле
Вопрос:
Я внедряю вставку тега в textarea. Все работает отлично.
Но.
В Firefox, если высота текста больше текстовой области, при появлении полосы прокрутки. После замены тега он переходит к началу текстовой области. Все остальные браузеры остаются там, где произошла замена.
Возможно ли это сделать в 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())
Комментарии:
1. Не могли бы вы, пожалуйста, создать тестовый пример на jsFiddle , который воспроизводит это поведение?
2. вот оно jsfiddle.net/49vsr/4 . Chrome остается, FF переходит.
Ответ №1:
Похоже, это ошибка в 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;
Ответ №2:
Вы должны добавить следующее перед 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 /
Это то, что вам было нужно?