Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2011, 05:10
Аспирант
Отправить личное сообщение для qwertyuiop Посмотреть профиль Найти все сообщения от qwertyuiop
 
Регистрация: 02.06.2011
Сообщений: 71

как всавить текст в textarea туда, где курсор?
сделал простой скрипт:
function bbsmilie(sml){
document.getElementById("kbbcode-message").value+=sml
}


html:

<textarea name="message" id="kbbcode-message" rows="10" cols="50"></textarea>


<img class="btnImage" src="http://sssnnnzzz.sz3.ru/components/com_kunena/template/default/images/emoticons/connie_click-me.gif" border="0" alt=":clik " title=":clik" onclick="bbsmilie(' :clik ');" style="cursor:pointer"/>


так, несколько смайлов.
проблема, в том, что вставляет в конец текста.
я так понимаю надо как-то присвоить переменной позицию курсора и вставить именно туда. ток как всё это сделать не знаю, помогите
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2011, 07:15
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

http://forum.vingrad.ru/forum/topic-35775.html
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2011, 12:54
Аспирант
Отправить личное сообщение для qwertyuiop Посмотреть профиль Найти все сообщения от qwertyuiop
 
Регистрация: 02.06.2011
Сообщений: 71

Octane,
не работает, там все непонятно както, можешь написать, чтобы все сводилось к одной функции "bbsmilie(smilie)"
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2011, 17:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от qwertyuiop
не работает
Что не работает? Вставляем тот код в сообщение и магическим образом вдруг начинает работать:
<script>/**
* Обьект через который мы и будем работать с текстовыми полями.
* Содержит все необходимые поля, легко расширяем по вкусу =)
* @argument  obj  HTMLElment  - текстовое поле, с кторым предстоит работать
* 
* Author: Sardar <Sardar@vingrad.ru>
*/
function TextAreaSelectionHelper(obj) {
  this.target=obj;
  this.target.carretHandler=this; //ссылка самого на себя для текстового поля
  /**
  * Помним, что события могут быть уже опредлеенны, тогда нужно использовать
  * очереди. Конечно, реализация для ИЕ и Мозиллы в корне различаются, почитать
  * и достать готовый код можно здесь: http://forum.vingrad.ru/index.php?showtopic=32350
  */
  this.target.onchange=_textareaSaver;
  this.target.onclick=_textareaSaver;
  this.target.onkeyup=_textareaSaver;
  this.target.onfocus=_textareaSaver;
  if(!document.selection) this.target.onSelect=_textareaSaver; //для Мозиллы
  
  this.start=-1;
  this.end=-1;
  this.scroll=-1;
  this.iesel=null; //для ИЕ
}
/**
* Достать отселектированный текст
*/
TextAreaSelectionHelper.prototype.getSelectedText=function() {
   return this.iesel? this.iesel.text: (this.start>=0&&this.end>this.start)? this.target.value.substring(this.start,this.end): "";
}
/**
* Вставить код под курсором. Если текст не отселектирован(не фокуса) и 
* позиция не взята, то вставить в конец текстового поля.
*
* @argument text String - заменить селекцию на этот текст
* @argument secondtag String - если задан, то селекция не заменяется, а обрамляется этими тегами
*/
TextAreaSelectionHelper.prototype.setSelectedText=function(text, secondtag) {
  if(this.iesel) {
    if(typeof(secondtag)=="string") {
   var l=this.iesel.text.length;
      this.iesel.text=text+this.iesel.text+secondtag;
   this.iesel.moveEnd("character", -secondtag.length);
    this.iesel.moveStart("character", -l);   
    } else {
   this.iesel.text=text;
    }
    this.iesel.select();
  } else if(this.start>=0&&this.end>=this.start) {
     var left=this.target.value.substring(0,this.start);
     var right=this.target.value.substr(this.end);
  var scont=this.target.value.substring(this.start, this.end);
  if(typeof(secondtag)=="string") {
    this.target.value=left+text+scont+secondtag+right;
    this.end=this.target.selectionEnd=this.start+text.length+scont.length;
    this.start=this.target.selectionStart=this.start+text.length;    
  } else {
       this.target.value=left+text+right;
    this.end=this.target.selectionEnd=this.start+text.length;
    this.start=this.target.selectionStart=this.start+text.length;
  }
  this.target.scrollTop=this.scroll;
  this.target.focus();
  } else {
    this.target.value+=text + ((typeof(secondtag)=="string")? secondtag: "");
    if(this.scroll>=0) this.target.scrollTop=this.scroll;
  }
}
/**
* Это функции для веса =)
*/
TextAreaSelectionHelper.prototype.getText=function() {
  return this.target.value;
}
TextAreaSelectionHelper.prototype.setText=function(text) {
  this.target.value=text;
}
/**
* Приватная фукнкция, записывающая позицию курсора
*/
function _textareaSaver() {
  if(document.selection) {
    this.carretHandler.iesel = document.selection.createRange().duplicate();
  } else if(typeof(this.selectionStart)!="undefined") {
    this.carretHandler.start=this.selectionStart;
    this.carretHandler.end=this.selectionEnd;
    this.carretHandler.scroll=this.scrollTop;
  } else {this.carretHandler.start=this.carretHandler.end=-1;}
}
//Пример использования
//эта строка отработает после загрузки страницы.
onload=function(){text=new TextAreaSelectionHelper(document.getElementById("textarea"));}
function test() {
 text.setSelectedText("[test]","[/test]");
// text.setSelectedText("[test]");
}</script>
<textarea id="textarea" cols=40 rows=5></textarea>
<span onClick="test()">Test</span>


Сообщение от qwertyuiop
там все непонятно както
Так и напиши, что лень разбираться.

Последний раз редактировалось Octane, 03.08.2011 в 17:16.
Ответить с цитированием
  #5 (permalink)  
Старый 03.08.2011, 18:32
Аспирант
Отправить личное сообщение для qwertyuiop Посмотреть профиль Найти все сообщения от qwertyuiop
 
Регистрация: 02.06.2011
Сообщений: 71

Octane,
спасибо, и правда работает когда на чистой странице вставляешь, щас буду искать, что на моей мешало
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2011, 23:51
Аспирант
Отправить личное сообщение для qwertyuiop Посмотреть профиль Найти все сообщения от qwertyuiop
 
Регистрация: 02.06.2011
Сообщений: 71

Octane,
не могу найти ошибку, скрипт останавливается на:
18 TextAreaSelectionHelper.prototype.getSelectedText= function() {
--------------------
22 TextAreaSelectionHelper.prototype.setSelectedText= function(text, secondtag) {
--------------------
54 TextAreaSelectionHelper.prototype.getText=function () {
--------------------
57 TextAreaSelectionHelper.prototype.setText=function (text) {
--------------------
71 onload=function(){text=new TextAreaSelectionHelper(document.getElementById("k bbcode-message"));}

эт в опере увидел, я думаю ошибка изза конфликта с другими скриптами, пытался менять имена переменных, не сработало, адрес страницы: sssnnnzzz.sz3.ru/index.php/ru/forum-oglavlenie/post?do=new
подскажите, где ошибка
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вставить текст в текст ариа alerzo Events/DOM/Window 6 14.03.2011 19:55
Вопрос: И опять про offsetLeft... sigurd Общие вопросы Javascript 11 04.10.2010 14:06
определить где курсор olgatcpip Общие вопросы Javascript 5 27.04.2010 09:59
Вопрос по относительному позиционированию DIV XPOMOB (X)HTML/CSS 11 15.07.2009 17:02
Как сделать чтобы text() брал только текст родителя без текста вложенных контейнеров? Andrey32 jQuery 3 23.05.2009 01:33