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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное выделение части строки в поле ввода, возможно ли? и как? 
:(
    Опции темы
Alex_B
Дата 7.5.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

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



Можно ли с помощью JavaScript выделить часть (один символ) строки в поле ввода HTML формы в IE?
для opera так:
Код

input.setSelectionRange(2,4);



Спасибо.

Это сообщение отредактировал(а) Alex_B - 7.5.2007, 15:38
PM MAIL   Вверх
Alex_B
Дата 7.5.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

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



Вот нашел, может кому пригодится:


Код

function setSelectionRange(element, start, end)
{
  if(end === undefined) end = start;

  // firefox
  if("selectionStart" in element)
  {
    element.setSelectionRange(start, end);
    element.focus(); // to make behaviour consistent with IE
  }
  // ie win
  else if(document.selection)
  {
    var range = element.createTextRange();
    range.collapse(true);
    range.moveStart("character", start);
    range.moveEnd("character", end - start);
    range.select();
  }
}


источник
PM MAIL   Вверх
GZep
Дата 7.5.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

Репутация: 2
Всего: 32



Alex_B, скрипт недоработанный:
совместимсть с оперой плохая, да и про mac пользователей IE забыл.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex_B
Дата 7.5.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

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



GZep, в Опере работает вроде нормально.

А как быть?
PM MAIL   Вверх
Sardar
Дата 7.5.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата(GZep @  7.5.2007,  16:33 Найти цитируемый пост)
совместимсть с оперой плохая, да и про mac пользователей IE забыл. 

В опере отработает первая ветка, хотя там можно и через document.selection курсором править. Что ты имел в виду?
Под маком старый IE, если он document.selection не держит, то тут уже ничем не поможешь.


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


участник Винграда
***


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

Репутация: 2
Всего: 32



Цитата(Sardar @  7.5.2007,  18:58 Найти цитируемый пост)
Под маком старый IE, если он document.selection не держит,

Вот document.selection он как раз и держит... А вот уже document.selection.createRange он не держит... Этим и воспользуемся.
вместо:
Цитата(Alex_B @  7.5.2007,  16:35 Найти цитируемый пост)
else if(document.selection)

надо
Код

if (document.selection && document.selection.createRange) {//IE 4.0 (win32) & Opera 8.0

Цитата(Alex_B @  7.5.2007,  17:48 Найти цитируемый пост)
Опере работает вроде нормально

Ну как же нормаль?... Вроде уже где-то писАли про передачу фокуса опере. Да и на практике я сам уже убедился, что так нельзя. Так же не стоит забывать, что document.selection в 8-ой и 9-ой вирсиях работают немного по-разному. Хотя в данном случае это, наверное, неважно.
Так что не:
Цитата(Alex_B @  7.5.2007,  16:35 Найти цитируемый пост)
range.select();

а: smile 
Код

if (!window.opera)

Усё, больше ничего плохого сказать про скрипт просто не могу... smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex_B
Дата 8.5.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

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



GZep, на 9-ой Опере работает.

А можно целый скрипт в сборе, пожалуста.
PM MAIL   Вверх
GZep
Дата 8.5.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

Репутация: 2
Всего: 32



Alex_B,
  • Кроме 9-ой, есть еще и 8-ая версия, в которой селекция поддерживается.
  • Я же все, что надо, в своем посте написАл! Ну, если лень читать то вот:
Код

function setSelectionRange(element, start, end)
{
  if(end === undefined) end = start;
  // firefox
  if("selectionStart" in element)
  {
    element.setSelectionRange(start, end);
  }
  // ie win
  else if (document.selection && document.selection.createRange) {
  {
    var range = element.createTextRange();
    range.collapse(true);
    range.moveStart("character", start);
    range.moveEnd("character", end - start);
  }
  if (!window.opera) range.select();
}

Удачи! smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Alex_B
Дата 8.5.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 24.4.2007

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



GZep, спасибо!
PM MAIL   Вверх
koreshX
Дата 12.1.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 28.3.2007

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



Доброго времени суток всем.
При использовании этого скрипта, столкнулся с проблемой - в IE (при выполнении второй ветки скрипта), если текст мультистрочный - выделение смещается на столько символов вправо, сколько переносов строки есть до места выделения. Чтобы решить эту проблему дописал вторую ветку скрипта (для IE) так (в плане JS я новичок, так что для использования думаю можно и оптимизировать + я использовал скрипт только для установки курсора потому end надо естественно по-другому установить)
Код

else if (document.selection && document.selection.createRange) {
  {
    var range = element.createTextRange();
    range.collapse(true);
    
    originaltxt = element.value;
    var or_start = start;
    var str = originaltxt.substring(0, start);
    while(true){
     pos = str.search(/\n/);
     if (pos == -1){
         break;
     }
     str = str.substring(pos+1, or_start);
     start--;
    }
    end = start;
    
    range.moveEnd("character", end);
    range.moveStart("character", start);
    range.select();
  }


Это сообщение отредактировал(а) koreshX - 12.1.2008, 18:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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