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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение отдельных слов в <textarea> 
:(
    Опции темы
BMC
  Дата 23.4.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток! Вот появилась такая потребность выделить конкретную часть <textarea>. Подскажите пожалуйста, возможно ли выделить текст в заданных рамках (например от 5-ого символа до 20-ого)? 

Мне просто надо сделать инпут в котором можно вводить время формата "hh:mm", причём чтобы максимум было "23:59". Сделать отдельно 2 инпута с часами и минутами не катит, т.к сама форма очень большая (до 1000 инпутов и больше). Примерно надо достичь результата как в Windows когда меняешь время системы. 

Но для начала буду очень признателен если поможете хотябы с выделением отдельной части текста.

Спасибо за внимание.  smile 
PM MAIL   Вверх
bars80080
Дата 24.4.2008, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



теоретически можно было инпуту назначить событие onkeyup и на него повесить функцию, в ней указать, что как только кол-во вводимых символов больше двух, вставить перед двумя последними цифрами символ ":", заодно можно повесить проверку на ввод только цифр, и чтоб следило за форматом

правда, не понял как это соотносится с текстареа
PM MAIL WWW   Вверх
BMC
Дата 24.4.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну в принципе, просто если вдруг окажется что с инпутом это не возможно, то похимичив, можно будет заменить его <textarea> маленького размера  smile  А, ещё вопрос, а можно в инпуте ну или в textarea зафиксировать к примеру двоеточие, ну чтобы его нельзя было стереть и чтобы оно оставалось на своём месте?  smile 
PM MAIL   Вверх
bars80080
Дата 24.4.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



можно, как я уже говорил при каждом нажатии кнопки на клаве проверять, что было введено и исправлять значение так, как хочется его видеть. допустим дополняя пробелами, если цифр меньше чем нужно
PM MAIL WWW   Вверх
BMC
Дата 24.4.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну я знал, что эти проверки надо делать, и делал их, но получалось что всё прыгало при замене символов, а чтобы сделать всё красивее надо было знать позицию каретки в инпуте и возможность выделять символы до двоеточия, и после. И наконец-то мои страдания закончились. После долгих и ужасных мучений, я всётаки нашёл то, что мне нужно было! Не знаю понадобятся ли эти функции кому-нибудь ещё, но всётаки выложу их тут.

Значит так:
1 функция - создаёт выделение от начального символа до конечного.
2 функция - показывает начало выделения (при отсутствии выделения, показывает позицию каретки)
3 функция - показывает конец выделения (при отсутствии выделения, показывает позицию каретки)

Код

var is_gecko = /gecko/i.test(navigator.userAgent);
var is_ie    = /MSIE/.test(navigator.userAgent);

function makeSelection(input, start, end) {
    var input = document.getElementById(input);    
    if (is_gecko) {
        input.setSelectionRange(start, end);
    } else {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveStart("character", start);
        range.moveEnd("character", end - start);
        range.select();
    }
}

function getSelectionStart(input, output) {
    var input = document.getElementById(input);
    var output = document.getElementById(output);
    
    if (is_gecko)
        {
            output.value=input.selectionStart;
        } else
            {
                var range = document.selection.createRange();
                var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
                if (!isCollapsed)
                    {
                        range.collapse(true);
                    }
                var b = range.getBookmark();
                output.value=b.charCodeAt(2) - 3;
            }
}

function getSelectionEnd(input, output) {
    var input = document.getElementById(input);
    var output = document.getElementById(output);
    
    if (is_gecko)
        {
            output.value=input.selectionEnd;
        } else
            {
                var range = document.selection.createRange();
                var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
                if (!isCollapsed)
                    {
                        range.collapse(false);
                    }
                var b = range.getBookmark();
                output.value=b.charCodeAt(2) - 3;
            }
}


Надеюсь кому-нибудь это поможет  smile  smile 

Это сообщение отредактировал(а) BMC - 24.4.2008, 11:04
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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