Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (js) Как сделать проверку ввода в текстовое поле? / 11 сообщений из 11, страница 1 из 1
04.09.2009, 11:14
    #36178482
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
http://www.bykovas.lt/temp/helpmeru.htm

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

Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>I need help</title>

<script type="text/javascript">

   function validatenumber(event, obj)
   {
    var code = (event.which) ? event.which : event.keyCode;
    var character = String.fromCharCode(code);
    if ((code >=  48  && code <=  57 ))
    {
      if (obj.value =="0")
        return false;
      if (!isNaN(obj.value))
      {
        if (obj.value =="0.00" && code ==  48 )
        {
          alert("Value cannot be less than 0.001");
          return false;
        }
      }
      return true;
  }
    else if (code ==  46 ) {
        if (obj.value.indexOf(".") <  0 ) {
            if (obj.value.length ==  0 )
                obj.value = "0";
            return true;
        }
    }
    else if (code ==  8  || code ==  116 )
    {
      return true;
    }
    else if (code >= 37  && code <=  40 )
    {
      return true;
    }
    return false;
  }

  function validatefield(obj)
  { 
    if (obj.value.indexOf(".") == obj.value.length- 1 )
    {
      obj.value = obj.value.substring( 0 , obj.value.length- 1 )
  }
  else if (obj.value.indexOf(",") == obj.value.length- 1 ) {
      obj.value = obj.value.substring( 0 , obj.value.length -  1 )
  }
    else if (isNaN(obj.value))
    {
      obj.value = "";
    }
    else if (obj.value <=  0 . 001 )
    {
      obj.value = "";
      alert("Value cannot be less than 0.001.");
    }
  }

</script> 

</head>

<body>

<form method="post">
				<input name="Text1" type="text" onkeyup="if(this.value.indexOf(',') != -1) this.value = this.value.replace(',', '.')" /> 
				- <span lang="lt">здесь запятую меняет на точку (как на webmoney, очень красиво)</span><br />
				<br />
				<br />
				<input name="Text2" type="text" onkeypress="return validatenumber(event, this);"
        onblur="validatefield(this)"/> - а здесь сразу куячит, если вводится не duoble<br />
				<br />
				надо: чтобы во втором текстбоксе, если пользователь нажал на запятую, ввелась точка и "далее по инструкции"</form>

</body>

</html>
...
Рейтинг: 0 / 0
04.09.2009, 13:58
    #36179002
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<script>
function validate(obj,e)
{
	e = e || window.event;
	var code = e.keyCode || e.which;
	if (code ==  8  || code ==  46  || code ==  116  || code >= 37  && code <=  40 ) return true;
        var ch = String.fromCharCode(code);
	if (ch == ',') ch = '.';
	if (!(/^\d+(\.\d*)?$/.test(obj.value + ch))) return false;
	else {obj.value += ch; return false;}
}
</script>
<input type="text" onkeypress="return validate(this,event)" />
ну и на onblur что-нить повесить, дабы защититься от вставки бреда через буфер. Или лучше на onchange, тогда при потере фокуса проверка будет произведена только в том случае, если значение изменилось.
...
Рейтинг: 0 / 0
04.09.2009, 14:09
    #36179040
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
могу ввести 1.1212. (то есть вторую точку)
про вставку из буфера будет другой вопрос ж)
...
Рейтинг: 0 / 0
04.09.2009, 14:37
    #36179138
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
ааа, точно... Япона мать, когда же все будет по-человечески?! В общем, история вопроса такая: есть три свойства эвента - charCode, keyCode и which. Для '.' в ФФ они будут равны 46, 0, 46; в ИЕ - undefined, 46, undefined. Для клавиши Del в ФФ - 0, 46, 0; в ИЕ - не обрабатывается. Про оперу не знаю. В общем, я плавно клоню к тому, что если Вы готовы для пользы дела отказаться от использования кнопки Del в этом контроле, то можно просто убрать условие code==46.
...
Рейтинг: 0 / 0
04.09.2009, 14:49
    #36179177
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
да чёрт с ним с дилитом, откажемся.
а как запретить вставку из буфера? )
...
Рейтинг: 0 / 0
04.09.2009, 15:21
    #36179287
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
Возьми библиотечный валидатор и не мучайся ... он не дает вставить запрещенные знаки даже из буфера обмена. Чего велосипед выдумывать?
...
Рейтинг: 0 / 0
04.09.2009, 15:21
    #36179288
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
Это не во всех браузервх работает: onpaste="return false;"
...
Рейтинг: 0 / 0
04.09.2009, 15:30
    #36179316
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
IDVsbruckВозьми библиотечный валидатор и не мучайся ... это то гамно, которое на точки (запятые) вопит, но позволяет из буфера вставлять "+2", "1E23" ? нихачу :)
...
Рейтинг: 0 / 0
04.09.2009, 15:36
    #36179341
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
IDVsbruckВозьми библиотечный валидатор и не мучайся ... он не дает вставить запрещенные знаки даже из буфера обмена.
а внутри никогда не копался? Какими методами достигается запрет вставки? Интересно стало...

Cheerful Calf,
Валидаторы разные бывают... Очевидно, надо уточнить у IDVsbruck какой он в виду имел. А если таки руками - то используется проверка постфактум на onblur или onchange. Можно прописать и onpaste="return false" (ИЕ поймет, остальные пропустят), и onchange. На onchange обычно значение проверяется на соответствие шаблону, в случае неудачи - значение стирается и полю возвращают фокус. Как дополнительное средство привлечения внимания юзера к возникшей проблеме - можно показывать рядом с полем div с сообщением о косяке во введенном значении.
...
Рейтинг: 0 / 0
04.09.2009, 15:40
    #36179350
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
Ещё можно проверку повесить ка онкейуп и онмаусеуп, взамен онпасте.
...
Рейтинг: 0 / 0
04.09.2009, 15:51
    #36179371
Cheerful Calf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(js) Как сделать проверку ввода в текстовое поле?
никак не соображу, что исправить чтобы с курсором правильно работало?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        function validate(obj, e) {
            e = e || window.event;
            var code = e.keyCode || e.which;
            if (code ==  8  || code ==  116  || code >=  37  && code <=  40 ) return true;
            var ch = String.fromCharCode(code);
            if (ch == ',') ch = '.';
            if (code ==  46 ) {
                if (obj.value.indexOf(".") <  0 ) {
                    if (obj.value.length ==  0 )
                        obj.value = "0";
                    return true;
                }
            }
            if (!(/^\d+(\.\d*)?$/.test(obj.value + ch))) return false;
            else { obj.value += ch; return false; }
        }
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (js) Как сделать проверку ввода в текстовое поле? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]