[javascript] вставка в TEXTAREA в позицию курсора

Flack_bfsp

Как? В гугл не посылать, уже всё обгуглил, что можно. Впоиск тоже, искал слова TEXTAREA, там совсем не то обсуждается.
Итак, мне нужно вставить некий текст в позицию курсора. Поглядел, как это делается здесь. на форуме. Вызывается некая функция insertAtCaret. Поискал в инете на это слово. Нашёл такую вещь:
 
function insertAtCaret (textEl, text)
{
if (textEl.createTextRange && textEl.caretPos)
{
var caretPos = textEl.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
} else
textEl.value += text;
}

Пробовал запускать. Всегда идёт на ветвь елсе. Независимо от того, есть ли текст в моём TEXTAREA или нет, много ли там сточек, или только одна, если ли выделение или нет. Что в этом коде неправильно? Глядел мсдн. Нету у TEXTAREA никаких свойств, похожих на caretPos.
Я в джаваскрипте не рюх, помогите, плз.

Fragaria

Глянь в исходники страницы этого форума, где ты пишешь ответ. Смайлики при нажатии ставятся в позицию курсора.

artimon

http://xpoint.ru/know-how/JavaScript/YemulyatsiyaSelectionSt...
По мотивам этой статьи была написана функция forum_bbTag
http://chelsea-fc.ru/js/forum.js
Как она работает можно посмотреть на http://chelsea-fc.ru/forum/

Flack_bfsp

Глянь в исходники страницы этого форума, где ты пишешь ответ. Смайлики при нажатии ставятся в позицию курсора.
Это я и сделал в первую очередь. Более того, я написал об этом в своём посте.

sbs-66

А посмотреть в исходниках этого форума функцию insertAtCaret?

Flack_bfsp

А посмотреть в исходниках этого форума функцию insertAtCaret?
А где их взять?

Flack_bfsp

http://chelsea-fc.ru/js/forum.js
Отбросив то, что не нужно, я понял, что основная фишка вот в этом:

var x = message$body.value.substr(0, message$body.selectionStart) +
start + message$body.value.substring(message$body.selectionStart, message$body.selectionEnd) +
end + message$body.value.substr(message$body.selectionEnd);
message$body.value = x;

Проблема в том, что все три сабстринга у меня возвращают весь текст. Полностью. А совсем не его подстроки.

artimon

Это для Gecko.
Для IE там второй блок.

Flack_bfsp

Для IE вообще не работает. Не находит свойство _sel у моей текстарии. Ну по крайней мере я так понял. У меня же нет никаких отладчиков Джаваскрипта.
Вот то, что я наваял:
  function insertAtCaret (textEl,  text) { 
var sel = textEl._sel;
if (sel.parentElement == textEl) {
var move_back = (sel.text == '' && text != '') ? - text.length : 0;
sel.text = text + sel.text + text;
sel.collapse;
sel.move('character', move_back);
sel.select;
} else {
textEl.value += text;
}
}

Что здесь неправильно?

Flack_bfsp

Хозяева форума! Ну покажите мне эту функцию, пожалуйста! Мне только одна функция нужна.

Dasar

тупишь.
посмотреть исходы этой функции ты можешь прямо в браузере, никакие хозяева форума для этого не нужны.

Flack_bfsp

Ой, я тормоз. И как я раньше её не увидел?

Flack_bfsp

Собственно, ровно то же, что я и писал в певром посте.
Тупо скопировал код функции. Не работает. Идёт сразу на елсе. Вставляет в конец текста. Что я делаю не так?

Flack_bfsp

Стойте, не говорите, я, кажется, понял.

Flack_bfsp

Ура! Работает! Теперь понять, почему работает, но это уже мелочи. Всем спасибо, тема закрыта.
Оставить комментарий
Имя или ник:
Комментарий: