![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Black |
|
|||
![]() Web-Development ![]() ![]() Профиль Группа: Участник Сообщений: 980 Регистрация: 15.8.2004 Репутация: 2 Всего: 45 |
Скрипт вставки текста под курсором:
Просьба протестировать скрипт в Opere ниже 8 версии. Работает в IE, FireFox, Opera 8. Лучше всего работает в FireFox, затем IE, Opera. В Opera бывают глюки. Пример и инструкции по использованию в прикреплённом файле. Если будете использовать скрипт в ваших проектах желательно сохранять копирайт или хотя бы меня известите. Жду предложений по усовершенствованию скрипта ![]() Это сообщение отредактировал(а) PHP-DIRECTOR - 19.6.2005, 17:03 -------------------- Могу все, но ничего не умею :-) |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Очень полезное замечание, на досуге подправлю свой код, вероятно это и есть причина глюков в Опере. Кстати, ты забыл для ИЕ при потере фокуса сохранять селекцию. Например что бы на форуме выделить цитату участника, затем нажать на кнопку и получить на место где раньше был курсор. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Там такое вообще не работает ![]() selection заработал только в 8 версии. |
|||
|
||||
Black |
|
||||||
![]() Web-Development ![]() ![]() Профиль Группа: Участник Сообщений: 980 Регистрация: 15.8.2004 Репутация: 2 Всего: 45 |
Sardar
кстати, я не пойму как это сделать. Дай подсказку ![]() Вот альтернативный скрипт:
Но вот проблема. Стоит вместо <textarea></textarea> поставить input и Opera начинает ставить текст в конец, а не под курсор. Кто может это объяснить??? Вот также пытаюсь сделать эмуляцию selectionStart/selectionEnd в Internet Explorer:
Если в <input type='text' value=''> поставить курсор, то его позиция записывается в selection Это даёт нам возможность осуществлять вставку данных под курсор. Например: document.selection.createRange().text += NeedText; Но вот если в этот же <input type='text' id='sss'> вставить данные таким образом: document.getElementById('sss').value='ля-ля'; то в этом случае позиция selection теряется и курсор перемещается в конец текстового поля. Интересно, нельзя ли как-нибудь отслеживать позицию selection (сохранять ее) и в случае вставки данных в текстовое поле через document.getElementById('sss').value возвращать позицию в нужное нам место. При этом я понимаю надо действовать так. Извлечь сохраненную позицию selection прибавить к ней длину вставленной строки через document.getElementById('sss').value и установить курсор в это место. Вот как самому передвигать курсор в текстовом поле на нужное кол-во символов я не могу понять . Как я понял Sardar'y удалось сохранить положение курсора. Вот теперь бы суметь его двигать. после строки str.value = str1 + ' ' + text + ' ' + str2; курсор уходит в конец текстового поля. Я хочу его вернуть в нужное мне место, то есть как будто произошел простой: document.selection.createRange().text += NeedText; Т.е. курсор надо вернуть назад на определенное кол-во символов, которое зависит от длины вставленной строки. Например, это делается в Mozilla с помощью: str.selectionStart = str.selectionEnd = позиция курсора; где str нужное нам текстовое поле. Жду комментариев ![]() Это сообщение отредактировал(а) PHP-DIRECTOR - 19.6.2005, 00:25 -------------------- Могу все, но ничего не умею :-) |
||||||
|
|||||||
Black |
|
||||
![]() Web-Development ![]() ![]() Профиль Группа: Участник Сообщений: 980 Регистрация: 15.8.2004 Репутация: 2 Всего: 45 |
Вот доработал скрипт:
вот это я не придумаю как сделать :-) Я так понимаю надо делать duplicate(), то вот на каком событии. У меня с дупликатом получаются вообще глюки ![]() Вот если бы суметь при потере фокуса сохранять селекцию в IE, то все будет GOOD. И скрипт будет то что надо ![]() -------------------- Могу все, но ничего не умею :-) |
||||
|
|||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Вот ты и сам ответил на свой вопрос ![]() А если ещё и на функцию _textareaSaver здесь посмотришь: http://forum.vingrad.ru/index.php?showtopic=35775 то вопроса не будет ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Black |
|
||||||
![]() Web-Development ![]() ![]() Профиль Группа: Участник Сообщений: 980 Регистрация: 15.8.2004 Репутация: 2 Всего: 45 |
Сделал так:
изменил эту функцию:
а в функцию InsertText(text) добавил:
Но если человек уберет курсор из текстового поля и затем щелкнет по ссылке запустившей функцию InsertText(text) текст добавится куда надо (на то место где был курсор до потери фокуса с текстового поля), но.... но после этого курсор становится в самое начало текстового поля, а ведь должен стать после добавленного текста... в чем глюк. Что делаю не так??? Вот полный код:
Это сообщение отредактировал(а) PHP-DIRECTOR - 19.6.2005, 15:33 -------------------- Могу все, но ничего не умею :-) |
||||||
|
|||||||
Black |
|
|||
![]() Web-Development ![]() ![]() Профиль Группа: Участник Сообщений: 980 Регистрация: 15.8.2004 Репутация: 2 Всего: 45 |
ФИНАЛЬНАЯ ВЕРСИЯ СКРИПТА
P.S: добавлена поддержка старых версий браузеров. Оптимизированна работа в браузере IE. Улучшена поддержка браузера Opera. Исправлены мелкие ошибки и недочеты ![]() Благодарю Sardarа за замечания. Это сообщение отредактировал(а) PHP-DIRECTOR - 19.6.2005, 20:19 -------------------- Могу все, но ничего не умею :-) |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 16 Всего: 317 |
Замени на: if(str.tagName.toUpperCase()=="TEXTAREA") str.focus(); -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Гость_Гость |
|
|||
Unregistered |
Огромное спасибо за замечательный скрипт! Все копирайты оставил.
|
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Слегка усовершенствовал скрипт под свои нужды. По-моему, стало чуть удобнее:
Изменил здесь: function position(name) { obj(name); Здесь: position(this.id); И здесь: function InsertText(text) { if (typeof(str)!="undefined") { Убрал это: onload='obj();str.focus();' И это: name = 'mess'; Теперь можно использовать этот скрипт для любого количества полей, не задавая иды этих полей. PS. Извините, если сделал элементарную вещь и отнимаю ваше время, но когда-то понять скрипт такого уровня для меня было недостижимо и я очень горд, что чему-то за это время научился и не могу не поделится ![]() Это сообщение отредактировал(а) Wolf1994 - 9.4.2006, 00:36 |
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Пожалуйста объясните, почему этот кусок кода вызывает глюки в IE (только в IE), при использовании textarea вместо input:
Ошибка: "Недопустимый аргумент". Для чего вообще нужен этот фрагмент? ![]() ![]() ![]() |
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 2 Всего: 67 |
Wolf1994, а ты удали эти строчки и тогда ошибки не будет.
![]() |
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Удалить-то я их удалил, но хочется понять - для чего это нужно?
![]() |
|||
|
||||
Wolf1994 |
|
||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Всё, разобрался. Эти функции создают две разбитых строки, чтобы для каждой из них определить - есть ли на концах пробелы. Мне обработка пробелов не нужна. Поэтому это тоже вырезаю:
Ещё один вопрос. Даже два. 1) Если в строку добавить символ возврата каретки "\n" - то будет ли он игнорироваться при вставке в "input"? 2) Как сделать определение - есть ли внутри вставляемого аргумента эти символы и отпозиционировать курсор после первого такого символа? То есть: [myquote]\nКУРСОР ЗДЕСЬ\n[/myquote] Если кто знает, то подскажите пожалуйста решения для всех браузеров! ))) Добавлено @ 05:39
Нашёл:
Последнее:
Это сообщение отредактировал(а) Wolf1994 - 9.4.2006, 05:43 |
||||||||
|
|||||||||
![]() ![]() ![]() |
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |