Автор Тема: Маска ввода в input  (Прочитано 12716 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн covex1

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 63
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Маска ввода в input
« : 27 Июня 2005, 14:19:23 »
Можно ли как-то сделать маску ввода для поля input?
Ну скажем номер телефона с префиксом (xxx)xxx-xx-xx
На чем это вообще можно реализовать для веба?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #1 : 27 Июня 2005, 14:40:36 »
а что - у тебя много вариантов? Яваскрипт

Оффлайн covex1

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 63
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #2 : 27 Июня 2005, 14:45:45 »
Понятно что "голый" HTML с этим не справиться. Яваскрипт для меня темный лес. Может есть место в инете где можно посмотреть как это работает?

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Маска ввода в input
« Ответ #3 : 27 Июня 2005, 17:02:21 »
на этом сайте есть форум по яваскрипту
поищи, может там что подходящее найдется

P.S. тему переношу туда
•••Jah\'d never let us down!•••

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Маска ввода в input
« Ответ #4 : 27 Июня 2005, 17:30:24 »
covex1
RomikChef
Я бы предложил на onSubmit вешать обработчик с регекспом...
LJ: Backslashed life (rss)

Оффлайн covex1

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 63
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #5 : 27 Июня 2005, 18:56:46 »
Решение найдено:



Сам код javascript:
var dFilterStep

function dFilterStrip (dFilterTemp, dFilterMask)
{
dFilterMask = replace(dFilterMask,\'#\',\'\');
for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++)
{
dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),\'\');
}
return dFilterTemp;
}

function dFilterMax (dFilterMask)
{
dFilterTemp = dFilterMask;
for (dFilterStep = 0; dFilterStep < (dFilterMask.length+1); dFilterStep++)
{
if (dFilterMask.charAt(dFilterStep)!=\'#\')
{
dFilterTemp = replace(dFilterTemp,dFilterMask.charAt(dFilterStep),\'\');
}
}
return dFilterTemp.length;
}

function dFilter (key, textbox, dFilterMask)
{
dFilterNum = dFilterStrip(textbox.value, dFilterMask);
if (key>95&&key<106) //fixes keypad input
{
key=key-48
}
if ((key==9) || (key==13)) // fixes tab and enter keys
{
return true;
}
if (key==46)// delete key erases the whole field
{
dFilterNum = dFilterStrip(\'\', dFilterMask);
}

if (document.selection.createRange().text.length==dFilterMask.length) //erase the whole field if selected
{
dFilterNum = dFilterStrip(\'\', dFilterMask);
dFilterNum = dFilterNum+String.fromCharCode(key);
}
else if (key==8&&dFilterNum.length!=0)
{
dFilterNum = dFilterNum.substring(0,dFilterNum.length-1);
}
else if ( ((key>47&&key<58)||(key>95&&key<106)) && dFilterNum.length{
dFilterNum=dFilterNum+String.fromCharCode(key);
}

var dFilterFinal=\'\';
for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++)
{
if (dFilterMask.charAt(dFilterStep)==\'#\')
{
if (dFilterNum.length!=0)
{
dFilterFinal = dFilterFinal + dFilterNum.charAt(0);
dFilterNum = dFilterNum.substring(1,dFilterNum.length);
}
else
{
dFilterFinal = dFilterFinal + "";
}
}
else if (dFilterMask.charAt(dFilterStep)!=\'#\')
{
dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep);
}
// dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),\'\');
}


textbox.value = dFilterFinal;
return false;
}

function replace(fullString,text,by) {
// Replaces text with by in string
var strLength = fullString.length, txtLength = text.length;
if ((strLength == 0) || (txtLength == 0)) return fullString;

var i = fullString.indexOf(text);
if ((!i) && (text != fullString.substring(0,txtLength))) return fullString;
if (i == -1) return fullString;

var newstr = fullString.substring(0,i) + by;

if (i+txtLength < strLength)
newstr += replace(fullString.substring(i+txtLength,strLength),text,by);

return newstr;
}

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Маска ввода в input
« Ответ #6 : 27 Июня 2005, 19:19:22 »
covex1
Что-то обьективно [off]до хрена[/off]...

onSubmit="return forms[\'form\'].elements[\'element\'].value.match(regexp);"

Что скажут отцы форума?
LJ: Backslashed life (rss)

Оффлайн covex1

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 63
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #7 : 28 Июня 2005, 09:41:25 »
Решение не претендовало на лавры  "сестры таланта"

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #8 : 28 Июня 2005, 09:48:15 »
он сабмит - некрасиво.
вроде бы, задача была сделать на лету.

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Маска ввода в input
« Ответ #9 : 28 Июня 2005, 10:29:34 »
covex1
Скрипт подозрительно длинный. Проверь как следует, делает ли он именно то что нужно, всегда ли он это делает, и всегда ли правильно. По себе знаю, что неприятно вводить данные, если их формат чересчур строг и неочевиден.
•••Jah\'d never let us down!•••

Оффлайн covex1

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 63
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #10 : 28 Июня 2005, 10:58:30 »
Вроде посмотрел результат. Пускает только одни цифры, результирующий вид получается строго по шаблону, передает значение поле вместе с шаблоном.
Скрипт найден на http://javascript.internet.com/forms/dfilter.html

Самого напрягло размерность ну и "вес" около 2 кб. Но клиент хочет видеть как надо нужную строчку, когда ее заполняет.
Ввиду того что java script для меня темный лес, это единственное решение которое нашел на просторах инета.

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Маска ввода в input
« Ответ #11 : 28 Июня 2005, 12:02:05 »
а он телефоны типа (01234)19-15-20 нормально воспринимает?
•••Jah\'d never let us down!•••

Оффлайн covex1

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 63
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Маска ввода в input
« Ответ #12 : 28 Июня 2005, 12:22:31 »
Как маску сделаешь так и будет воспринимать

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Маска ввода в input
« Ответ #13 : 28 Июня 2005, 12:23:26 »
CGVictor
Если умеешь - напиши регексп, а?

Я что-то начал пробовать, да не выходит:



Говорит - false. В чем затык - в упор не понимаю.
•••Jah\'d never let us down!•••

Оффлайн Xander

  • санитар леса
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1780
  • +0/-0
  • 2
    • Просмотр профиля
Маска ввода в input
« Ответ #14 : 28 Июня 2005, 12:29:43 »
covex1
это я к тому, что в общем случае (###)###-##-## - негодная маска. Ну, дело твое.
•••Jah\'d never let us down!•••

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28