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

Поиск:

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


Шустрый
*


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

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



К сожалению скрипт ksnk унаследовал все недостатки, и рабочим его назвать нельзя.

Сейчас вижу что идея реализации с самого начала не верна и не могла привести к полностью рабочей версии.
Скоро будет готова новая версия, работающая по другому принципу.

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


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



Да, я подумал над юзабельностью, и увидел большой недостаток: о шаблонах разговор есть, а шаблона юзеру не видно. Его можно, конечно, написать рядом, но это прошлый век в скриптах. Лучше сделать поле, очень похожее на ввод, чтобы не пришлось объяснять. Наводит юзер на него - там высвечивается шаблон. Кликнул на цифру - замигал курсор или подчёркивание (всё на стилях и таймере). И шаблон цифры продолжает подсвечиваться, только бледно, чтобы не забыл, что цифру надо ввести. Ввёл - фон белый под цифрой, а курсор на следующем допустимом для ввода символе. Затирания (по document.onkeyup), стрелки и delete эмулируются, мышью переходим на цифры. Чтобы при наведении в поле появилось примерно вот это:
Код
<style>
.digit{background:#CA9;border:1px solid #642;padding:2px;margin:1px;color:#ffc}
.symb{background:#A9C;border:1px solid #426;padding:2px;margin:1px;color:#ffc}
.templateInput{border:2px inset;padding:2px;margin:2px}

</style>

<div><tt class=templateInput>
<span class=digit>Ц</span><span class=digit>Ц</span><span class=digit>Ц</span><span class=symb>-</span><span 
class=digit>Ц</span><span class=digit>Ц</span><span class=symb>-</span><span class=digit>Ц</span><span
 class=digit>Ц</span>&nbsp;&nbsp;</tt></div></tt>
Тогда понятно будет, что ввод по шаблону.

Это сообщение отредактировал(а) 12345c - 8.5.2007, 16:29


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
ksnk
Дата 8.5.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

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



12345c, Такая техника ("выпячивание" шаблона ввода) где-нибудь (не обязательно в WEB- проекте) используется? Если да, то можно какие-нибуь названия - ссылки? Я такого не встречал smile


Alex_B, Мой скрипт был не исправлением логики парсера, а скорее демонстрацией принципа "гибкости". Парсер ввода - отдельно, тултип - отдельно. И еще для полноты картины - возможность множественных полей ввода на страничке. Если что-то понравилось, я буду рад, если это что-то появится/останется и в следующих версиях скрипта smile 
Цитата(Alex_B @  7.5.2007,  22:38 Найти цитируемый пост)
Скоро будет готова новая версия, работающая по другому принципу.
 Ждем'с  smile 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alex_B
Дата 8.5.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ksnk, спасибо, только воспользоваться я кодом пока не могу, он сложен для меня, разбираться пока не стал.

"выпячивание" это как раз нормальное явление, в C++Builder MaskEdit (откуда и пришла сама идея) как раз сделано "выпячивание". И в поле ввода всегда выделено место куда будет вводится символ. Т.е. всегда происходит замена символа в поле на вводимый. 
Вот это и есть новый принцип: что бы пользователь ни нажимал (смивол, цифра, del, backspace) всегда должна происходить только замена выделенного символа.
PM MAIL   Вверх
12345c
Дата 8.5.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



ksnk, в бланках заполнения всяких банковских квитанций, личных данных в билетах (авиа), где нужно чётко по шаблону прописать данные, чтобы понять могли самые разные культуры и люди.

Далее, в Ворде каким-то образом составляют бланки, в которых можно писать в строго заданных полях (правда, что угодно, если только скрипты (макросы) не использовать.


Alex_B, > смивол, цифра, del, backspace
не совсем так - последние 2 клавиши всеми понимаются как управляющие, поэтому нормально, если поле от них очистится, а курсор передвинется назад.
PM WWW   Вверх
Alex_B
Дата 13.5.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



operatedInput v0.2.7


Изменения:
-Полностью переработана логика.
-Наконец то появилась функция синхронизирующая маску с полем ввода, т.е. одному символу в поле ввода соответствует один символ в синхронизированной маске. Это сильно упрощает поиск правила для вводимого символа (visualizationMask).
-Так как пользователь может захотеть ввести символ не только в конец поля ввода, а и куда-нибудь посередине, добавлено отслеживание курсора ввода.
-Del и Beckspace работают корректно
-Возможно перемещение курсора ввода стрелками или мышкой (теперь это не вызывает сбоев как раньше)
-Предусмотрено получение фокуса кнопкой Tab.(выделяется все поле – после попытки ввести символ - курсор ввода ставится на первую позицию для ввода)
-Маска ввода теперь видна. Специальные символы в ней заменяются указанным разработчиком символом.

Способ применения:
Код

operatedInput('mask','(/000)000-00-00','_');

mask – уникальный ID поля ввода;
(/000)000-00-00 – маска ввода
Третий аргумент функции _ - символ замены специальных символов для визуализации маски

Пример использования:
Код

<html>
<head>
    <title>jsMask</title>
    <script type="text/javascript" src="operatedInput028.js"></script>
    <script type="text/javascript">
    window.onload=function(){
        operatedInput('mask','(/000)000-00-00','_');
    }
    </script>
<style type="text/css">
.text_error{
    border: 1px solid #FF0000;
}
</style>
</head>
<body>
<input name="Name" type="text" value="asas" id="mask">
</body>
</html>



ToDo List
Это как раз тот случай когда код вышел из под контроля. Много повторяющихся кусков. Но это не самое страшное.
Курсор ввода теперь – это выделенный символ в поле ввода. После ввода очередного символа, это выделение сдвигается вправо. Этот сдвиг происходит по событию onkeyup. Вот это и есть проблема – если быстро и бездумно давить на клавиши, то курсор ввода не успевает переместиться и система дает сбой.



ПРОСЬБА:
Прошу помочь разобраться с описанной выше проблемой. Нужно как-то изменить функцию проверки ввода, а именно найти способ как передвинуть курсор ввода не по событию onkeyup.
Вот этот кусок кода:
Код

//непосредственно проверка ввода
var permit = true;
function doRule(e){
    var evt = e || window.event;
    var code = evt.charCode || evt.keyCode;
    var rule = getMaskChar(input,synchronizeMask);
    switch (rule){
        case '0':
            if ((code < 48) || (code > 57)){mark2(inputID,'ожидается цифра');permit = false;}
            break;

        case 'R':
            if ((code < 1040) || (code > 1103)){mark2(inputID,'ожидается русская буква');permit = false;}
            break;

        default:
            permit = false;
            break;
    }
    return permit;
}//end непосредственной проверки ввода
input.onkeypress = doRule;

input.onkeyup = function(e){
    input.onkeypress = null;
    ...
    setSelectionRange(input,Selection.end,Selection.end+1);   //сдвигаем выделение вправо
    ...
}


Возможно, есть какой-то другой способ, например, запретить ввод, если в поле ввода нет выделения?? Буду благодарен за идею.
(сделаем крутую систму, все подпишимся и будет  good smile )

Это сообщение отредактировал(а) Alex_B - 14.5.2007, 12:21

Присоединённый файл ( Кол-во скачиваний: 35 )
Присоединённый файл  operatedInput027.zip 2,77 Kb
PM MAIL   Вверх
ksnk
Дата 13.5.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

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



Кое-кто говорил, что мой код слишком сложен smile
На правах идеи - по onkeydown сохранять предыдущее значение value, по onkeyup - измененное. Если последнее не подходит - ругаемся. Никаких selection'ов и и прочей странной магии. По разнице введенных данных и с учетом маски можно понять (надеюсь) что-же было введено.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
linuxer
Дата 13.5.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Alex_B @ 13.5.2007,  09:51)
Возможно, есть какой-то другой способ, например, запретить ввод, если в поле ввода нет выделения?? Буду благодарен за идею.
(сделаем крутую систму, все подпишимся и будет  good smile )

Ну чтоб ввод был совсем уж управляемый, можно "съесть" keyCode, а символ(ы) вставить(удалить) самому

Добавлено через 10 минут и 47 секунд
Цитата(Alex_B @ 13.5.2007,  09:51)
operatedInput v0.2.7

ещё недоработка:
при нажатии ctrl/shift (или при переключении раскладки), 
сообщения об ошибке не приходит, но курсор перемещается на следующий символ
PM MAIL   Вверх
Alex_B
Дата 14.5.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



operatedInput v0.2.8
(РАБОЧАЯ)

Изменения:
По сравнению с operatedInput v0.2.7
-Добавлена корректная работа с быстрым и бездумным давлением на клавиши – система не дает сбоя.
-Добавлена корректное выполнение нажатий ctrl/ shift /переключении раскладки/ tab

Поддерживаются следующие специальные символы для задания маски:
0 – только цифра
R – только русская буква
- экранирование символа

Пример использования такой же как и operatedInput v0.2.7

ToDo List
Версия рабочая и пригодна для использования, однако требуются изменения – добавить правил, подсказку оформить как tooltip, возможно привести код в порядок.

Это сообщение отредактировал(а) Alex_B - 14.5.2007, 12:22

Присоединённый файл ( Кол-во скачиваний: 216 )
Присоединённый файл  operatedInput028.zip 2,82 Kb
PM MAIL   Вверх
ksnk
Дата 14.5.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

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



Действительно, работает. smile Не без приглючений, правда. Из оставшихся багов накопалось пока:
  • copy-paste. Можно вставить что-нибудь в поле безнаказанно. Может, по onBlur тоже проверять?
  • Нет разумной возможности очистить поле ввода.
  • Нет возможности отметить поле ввода и скопировать его


 




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alex_B
Дата 14.5.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ksnk @ 14.5.2007,  16:27)
Действительно, работает. smile Не без приглючений, правда. Из оставшихся багов накопалось пока:

  • copy-paste. Можно вставить что-нибудь в поле безнаказанно. Может, по onBlur тоже проверять?
  • Нет разумной возможности очистить поле ввода.
  • Нет возможности отметить поле ввода и скопировать его

>Нет разумной возможности очистить поле ввода.
А как должна выглядеть разумная очистка ввода?
Сейчас можно стирать Backspace  и del

>Нет возможности отметить поле ввода и скопировать его
Я и не думал, что это может понаджобиться. Спасибо за идею.

>copy-paste. Можно вставить что-нибудь в поле безнаказанно. Может, по onBlur тоже проверять?
А вот тут сложная задача...
PM MAIL   Вверх
ksnk
Дата 14.5.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

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



Цитата(Alex_B @  14.5.2007,  17:09 Найти цитируемый пост)
А как должна выглядеть разумная очистка ввода?
Сейчас можно стирать Backspace  и del
 Иногда хочется не вводить в поле ничего. Обычно это делается кнопкой Del на полностью выделенном поле smile Сейчас этого сделать нельзя. 




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 14.5.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

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



Поиск MaskEdit'а в интернете дал тот факт, что в
проекте Tapestry (некий фреймворк для разработки WEB приложений) содержится MaskEdit для input'а. Препарирование сего проекта дало вот этот код.
Ногами - не бить , моего тут - только HTML.  smile 

Присоединённый файл ( Кол-во скачиваний: 85 )
Присоединённый файл  MaskEdit.zip 3,82 Kb


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alex_B
Дата 14.5.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ksnk @ 14.5.2007,  20:01)
Поиск MaskEdit'а в интернете дал тот факт, что в
проекте Tapestry (некий фреймворк для разработки WEB приложений) содержится MaskEdit для input'а. Препарирование сего проекта дало вот этот код.
Ногами - не бить , моего тут - только HTML.  smile

В опере не работает, в IE блокирует как потенциально опасное содержимое
PM MAIL   Вверх
ksnk
Дата 14.5.2007, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

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



Цитата(Alex_B @  14.5.2007,  21:39 Найти цитируемый пост)
В опере не работает, в IE блокирует как потенциально опасное содержимое

Я не хочу сказать, что это крутой продукт smile , однако кое-какие решения вполне можно оттуда позаимствовать. 
А вот про потенциально опасное содержимое поподробнее можно? Вроде ничего, кроме обычного javascript'а там нет.


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


 




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


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

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