Текстовая область заменяет значение scrollHeight в Firefox - PullRequest
0 голосов
/ 06 мая 2011

Я реализую вставку тега в 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 есть проблема с удалением \ r textarea.val ())

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Перед предложением 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 голосов
/ 06 мая 2011

Это похоже на ошибку в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...