Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вставить текст под курсором, исчерпывающий ответ 
:(
    Опции темы
sergejzr
Дата 1.4.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13281
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



С ие и мозиллой он всегда работал. проблема только с Оперой
Цитата(Aliance @ 1.4.2005, 17:42)
А функция «Быстрой цитаты» работает по этому же коду/принципу?

Нет, когда сделали сперва, то всем ужастно не понравилось, что цитата в курсор вставлялась. Было очень неудобно.

Добавлено @ 18:57
http://forum.vingrad.ru/index.php?showtopic=32152&hl=
Где то здесь обсуждали smile
PM IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Aliance
Дата 1.4.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 6
Всего: 137



Цитата(sergej @ 1.4.2005, 18:52)
когда сделали сперва

А как тогда сейчас? Впринципе, различие там только в том, чтобы только отселектрированный текст вставлять...
PM MAIL WWW ICQ Skype   Вверх
sergejzr
Дата 1.4.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13281
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Value+=цитата smile
PM IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 1.4.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6984
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 16
Всего: 317



sergej.z, а я цитату в новом дизайне под курсором вставляю, нужно исправить...


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 1.4.2005, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 6
Всего: 137



Цитата(sergej @ 1.4.2005, 19:11)
Value+=цитата

А чего так? =/
PM MAIL WWW ICQ Skype   Вверх
sergejzr
Дата 1.4.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13281
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(Aliance @ 1.4.2005, 20:07)
А чего так? =/

Вот, нашёл smile
http://forum.vingrad.ru/index.php?showtopi...58&unread=1&hl=
Цитата(Sardar @ 1.4.2005, 19:41)
sergej.z, а я цитату в новом дизайне под курсором вставляю, нужно исправить...

Как видишь...

PM IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Wolf1994
Дата 1.8.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Что-то я не смог разобраться с установкой примера, предложенного Sardar'ом, под IE 6. В JavaScript я разбираюсь плохо, поэтому не смог проанализировать код. Как мне кажется, не записывается позиция курсора - вставка у меня осуществляется в конец текста. Возможно я что-то не так сделал, тогда, пожалуйста, подскажите - что?

Файл HTML:
Код

<script src="insert.js"></script>
<textarea id="textarea1" cols=80 rows=20>hhj</textarea>
<span onClick="test()">Test</span>


Файл "insert.js":
Код

/**
* Обьект через который мы и будем работать с текстовыми полями.
* Содержит все необходимые поля, легко расширяем по вкусу =)
* @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;}
}

//Пример использования
function test() {
var text=new TextAreaSelectionHelper(document.getElementById("textarea1"));
text.setSelectedText("[test]","[/test]");
//text.setSelectedText("[test]");
}

PM MAIL WWW   Вверх
Aliance
Дата 15.8.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 6
Всего: 137



Код

<script src="insert.js"></script>
...
<textarea id="textarea1" cols=80 rows=20 name="AAAA">hhj</textarea>
<script type="text/javascript">var post=new TextAreaSelectionHelper(document.getElementById("AAAA"));</script>

PM MAIL WWW ICQ Skype   Вверх
-NIK-
Дата 4.11.2005, 12:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











эм, я очень слаб в JavaScript, это только для IE? Если да, то имхо есть вариант легче.

Код

<script>
function zzz()  {
  obj_ta=document.form.textarea;
  obj_ta.focus();
  var sel=document.selection;
  var rng=sel.createRange();
  rng.colapse;
  var podst="<b>"+rng.text+"</b>";
  rng.text=podst;
 }
</script>
<form name=form>
<input type=button value=" B " onClick=zzz()><br><br>
<textarea name=textarea cols=50 rows=10></textarea>
</form>


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

  Вверх
sergejzr
Дата 4.11.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13281
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



-NIK-, Sardar "только для ИЕ" не пишет smile
PM IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Aliance
Дата 4.11.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 6
Всего: 137




Модератор: Сообщение скрыто.

PM MAIL WWW ICQ Skype   Вверх
Alx
Дата 21.1.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



я вот чего не понял. мы в мозилле, когда хотим заменить выделение, мы делим на три части, потом заменяем среднюю часть, опять соединяем в одну часть и полностью заменяем на неё содержимое инпута?


--------------------
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 21.1.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13281
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(Alx @ 21.1.2006, 14:57 Найти цитируемый пост)

я вот чего не понял. мы в мозилле, когда хотим заменить выделение, мы делим на три части, потом заменяем среднюю часть, опять соединяем в одну часть и полностью заменяем на неё содержимое инпута?

Именно так. В версии 1.5 возможно кое что и изменилось. Например document.selection теперь обьектом стал. Но это надо ещё посотреть что, да как. Пока некогда..
PM IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Alx
Дата 21.1.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



ок, спасибо.
решений для других браузеров, кроме IE и Firefox так и нету, да?


--------------------
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 21.1.2006, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13281
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



решение Сардара работает н всём, кроме оперы <8.0 (для старых опер решения нет. программисты там - пофигисты smile)
PM IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Google
  Дата 24.11.2017, 13:59 (ссылка)  





  Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.1236 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.