Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: JS: вставка тегов в <textarea> по клику! Проблема с курсором...
 
 автор: Stanisov   (04.06.2009 в 03:59)   письмо автору
 
 

Вот есть работающий код, аналог кода что на этом форуме
<!--
function tag(text1, text2)
{
 if((document.selection))
  {
   document.form.message.focus();
   document.form.document.selection.createRange().text = text1+document.form.document.selection.createRange().text+text2;
  }
 else if(document.forms['form'].elements['message'].selectionStart !=undefined)
  {
   var element = document.forms['form'].elements['message'];
   var str = element.value;
   var start = element.selectionStart;
   var length = element.selectionEnd - element.selectionStart;
   element.value = str.substr(0, start)+text1+str.substr(start, length)+text2+str.substr(start+length);
  }
 else document.form.message.value+=text1+text2; ?}
//-->

текст в поля вставляется, а вот курсор после вставки переносится в конец! Как сделать что был как на этом форуме, - между тегами! Например [codе]курсор[/соde]? Сдесь не могу понять

  Ответить  
 
 автор: PAT   (04.06.2009 в 09:28)   письмо автору
 
   для: Stanisov   (04.06.2009 в 03:59)
 

http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=64151

  Ответить  
 
 автор: Stanisov   (04.06.2009 в 10:57)   письмо автору
 
   для: PAT   (04.06.2009 в 09:28)
 

Спасибо, PAT все теперь понятно

  Ответить  
 
 автор: Stanisov   (06.06.2009 в 15:12)   письмо автору
 
   для: PAT   (04.06.2009 в 09:28)
 

PAT, пригдянулся к коду и там не совсем то что мне нужно.... там у вас рассматривается положение курсора с разных браузеров, так вот не один пример для моего случая не подходит, ведь мне необходимо чтобы курсор поподал всегда МЕЖДУ вставленными тегами

  Ответить  
 
 автор: PAT   (06.06.2009 в 15:50)   письмо автору
 
   для: Stanisov   (06.06.2009 в 15:12)
 

От вас требуется уточнение.

Скрипт по ссылке В ЧАСТНОМ СЛУЧАЕ (номер 1) работает так:
Кликаем по какому-то месту текста внутри TEXTAREA, а затем жмём на кнопку нужного нам
вставляемого тега и в TEXTAREA получаем:
текст до места клика[тег][/тег]текст после места клика


В ЧАСТНОМ СЛУЧАЕ (номер 2) по TEXTAREA вовсе не кликаем (не даём ему фокус), а просто
жмём на кнопку нужного нам вставляемого тега и в TEXTAREA получаем:
конец текста[тег][/тег]

В двух этих ЧАСТНЫХ случаях всё ЯСНО - вам надо, чтобы курсор мигал между символами ] и [.


Но ГДЕ ИМЕННО должен мигать курсор В ОБЩЕМ СЛУЧАЕ, когда сначала выделяем какой-то
кусочек имеющегося текста мышкой и затем жмём на кнопку нужного нам вставляемого тега и в
TEXTAREA получаем:
текст[тег]выделенный ранее текст[/тег]текст

После КАКОЙ ИМЕННО БУКВЫ в "выделенном ранее тексте" должен мигать курсор?
Перед первой? После последней? Посередине?

Ответьте на поставленный вопрос - и я постараюсь вам помочь.

  Ответить  
 
 автор: Stanisov   (06.06.2009 в 18:04)   письмо автору
 
   для: PAT   (06.06.2009 в 15:50)
 

Ааааха....а вот тут заморочко :)....
ЕСЛИ вставлять тэги в поле текстареа НЕ ВЫДЕЛЯЯ до этого текст, то - курсор должен быть  [] | [/]  всегда между ними, (чтобы удобней было прописывать в них текст)


а вот ЕСЛИ вставлять тэги, перед этим выделив необходимый текст (который они должны обрамлять), то - курсор должен быть вконце [][/] | 


...Вот именно так мне нужно

  Ответить  
 
 автор: PAT   (06.06.2009 в 19:50)   письмо автору
 
   для: Stanisov   (06.06.2009 в 18:04)
 

function tag (TXT, startTag, endTag)
{
TXT.focus ();
if (document.selection) with (document.selection.createRange ())
   {
   var t = text; text = startTag + text + endTag;
   if (!t.length) moveEnd ('character', endTag.length * (-1)); select ();
   }
else if (TXT.selectionStart >= 0) with (TXT)
   {
   var sT = scrollTop, sL = scrollLeft, t = value,
   stS = selectionStart, leS = selectionEnd - stS,
   w = (startTag + t.substr (stS, leS) + endTag).length;
   value = t.substr (0, stS) + startTag + t.substr (stS, leS) + endTag + t.substr (stS + leS);
   if (leS) selectionStart = selectionEnd = stS + w;
   else selectionStart = selectionEnd = stS + startTag.length;
   scrollTop = sT, scrollLeft = sL;
   }
else TXT.value += startTag + endTag;
}

  Ответить  
 
 автор: Stanisov   (07.06.2009 в 23:12)   письмо автору
 
   для: PAT   (06.06.2009 в 19:50)
 

Этот код вообще не работает, делаю textarea id="TXT"

а в ссылке параметр onClick="javascript:tag(getElementById('TXT'),'[uri]','[/uri]')"
и код вообще не вставляется

  Ответить  
 
 автор: PAT   (08.06.2009 в 01:51)   письмо автору
 
   для: Stanisov   (07.06.2009 в 23:12)
 

1. Коды, которые я здесь выкладываю, РАБОТАЮТ.
Ибо я их проверяю.
Как минимум в трёх браузерах (MSIE, FireFox, Opera).

2. Присваивать вашему TEXTAREA идентификатор id="TXT" совсем не нужно было.
Переменная TXT - это аргумент функции.
При вызове функции этот аргумент получает то значение,
кое вы передадите в качестве параметра.

3.
onClick="javascript:tag(getElementById('TXT'),'[uri]','[/uri]')" - неправильно

onclick="tag (document.getElementById ('id_вашего_textarea'), '[uri]', '[/uri]')" - правильно


Проверяйте:
<script>
function tag (TXT, startTag, endTag)
{
TXT.focus ();
if (document.selection) with (document.selection.createRange ())
   {
   var t = text; text = startTag + text + endTag;
   if (!t.length) moveEnd ('character', endTag.length * (-1)); select ();
   }
else if (TXT.selectionStart >= 0) with (TXT)
   {
   var sT = scrollTop, sL = scrollLeft, t = value,
   stS = selectionStart, leS = selectionEnd - stS,
   w = (startTag + t.substr (stS, leS) + endTag).length;
   value = t.substr (0, stS) + startTag + t.substr (stS, leS) + endTag + t.substr (stS + leS);
   if (leS) selectionStart = selectionEnd = stS + w;
   else selectionStart = selectionEnd = stS + startTag.length;
   scrollTop = sT, scrollLeft = sL;
   }
else TXT.value += startTag + endTag;
}
</script>

<textarea id="myId" style="width: 100%; height: 200px"></textarea><br>
<input type="button" value="Insert Tag" onclick="tag (document.getElementById ('myId'), '[uri]', '[/uri]')">


PS. На будущее - протокол javascript: используют где-либо, кроме атрибута HREF тега <A>,
только придурки. Не уподобляйтесь им.

  Ответить  
 
 автор: Illusion   (30.12.2009 в 13:36)   письмо автору
 
   для: PAT   (08.06.2009 в 01:51)
 

Доброго всем времени суток.

Есть у меня код
<form method=$_POST "ACTION=message">
<select name="name" size=1 >
<option selected> 1</option>
<option> 2</option>
<option> 3</option>
<option> 4</option>
</select>
<input  style="margin:0px;  type="button" value="paste" onClick="editform.message.value = "name">
</form>
<textarea name="message" rows="15" cols="76" tabindex="3" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" style="width: 98%;"></textarea>


он не пашет
Задача такова - юзер а форуме из списка выбирает нужную формулу вида "\int" "\cos" и нажимает кнопку вставить, которая впихивает это в texarea.

из ваших тем
http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=65593
http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=64151

узнал что это надо делать с помощью js.

Помогите плиз разобраться! Первый раз сел чето кодить! Может кто знает где готовая форма лежит, или пните в нужном направлении!

  Ответить  
 
 автор: z668   (21.03.2011 в 01:16)   письмо автору
 
   для: PAT   (08.06.2009 в 01:51)
 

Спасибо за представленный код. Все отлично работает.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования