Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка полей формы (https://javascript.ru/forum/jquery/55189-obrabotka-polejj-formy.html)

Moloch 17.04.2015 00:11

Обработка полей формы
 
Здравствуйте подскажите пожалуйста как реализовать след. задачу . есть форма следующего вида
<form id="form" onsubmit="return false">
			Имя:<br />
			<input type="text" class="req_field" name="username" /><br/>
			Комментарий:<br/>
			<textarea rows="5" cols="30" name="comment" class="req_field"></textarea><br />
			<!--<input  type = "button" value="Отправить">-->
      <button type="submit">Отправить</button>
		</form>

необходимо Разрешить ввод только символов [8, 9, 13, 16, 17, 32, 37, 39, 46, 65-122, 189]
При вводе недопустимого символа вывести alert('Недопустимый символ') и удалить этот символ

я сделал это так

$(function(){
 var mas = [0,8, 9, 13, 16, 17, 32, 37, 39, 46,56, 189];
  var chrcd=0;
  var str = '';
 $('#form .req_field').on('keyup',function(e){


      if (!mas.find_in_array(chrcd)) {
        alert('введен недопустимый символ! :' +chrcd);
        str = $(this).val();
       $(this).val(str.slice(0, -1));
      }
      

    });

  
  $('#form .req_field').on('keypress',function(e){
    chrcd=e.charCode;
    console.log(e.charCode);
     

    });

Array.prototype.find_in_array = function(needle) {

   for(var i = 0, l = this.length; i < l; i++)  {

      if(this[i] == needle) {

         return true;

      }

   }

   return false;

}

});


Проблема в том, что если я ввел последовательность из разрешенных символов а потом ввожу неразрешенный, скрипт его удаляет. Но если я потом хочу стереть клавишей backspace (ее нажатие разрешено) оставшиеся символы, скрипт каждый раз выводит алерт с чаркодом этого самого неразрешенного символа. Как исправить эту проблему?

Moloch 17.04.2015 00:38

и сразу попутный вопрос как задать в массиве у элемента диапазон значений [65-122] . чтобы можно было функцией find_in_array пробежать по всем элементам основного массива и также по всем элементам массива [65-122]?

рони 17.04.2015 01:08

Moloch,
вариант ...
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
   $(function(){
var mas = [0, 8, 9, 13, 16, 17, 32, 37, 39, 46, 56, 189];
$("#form .req_field").on("input", function(e) {
    var str = $(this).val();
    str = str.split("");
    var test = str.filter(function(el) {
        var kod = el.charCodeAt(0);
        var ok = find_in_array(kod);
        !ok && $("p").text("введен недопустимый символ! : " + el);
        return ok
    });
    $(this).val(test.join(""))
});
function find_in_array(needle) {
    if (needle >= 65 && needle <= 122) return true;
    for (var i = 0, l = mas.length; i < l; i++)
        if (mas[i] == needle) return true;
    return false
};
})
  </script>
</head>

<body>
<p></p>
<form id="form" onsubmit="return false">
			Имя:<br />
			<input type="text" class="req_field" name="username" /><br/>
			Комментарий:<br/>
			<textarea rows="5" cols="30" name="comment" class="req_field"></textarea><br />
			<!--<input  type = "button" value="Отправить">-->
      <button type="submit">Отправить</button>
		</form>
</body>

</html>

Moloch 17.04.2015 19:19

Я походу выбрал неправильное событие для обработки. Проверку я выполнял по событию keyup и если символ был неразрешеным, то удалял этот самый последний символ из value того или иного инпута. Но тут концепция не верна т.к. событие keyup может вообще не произойти если зажать клавиши или если кликнуть курсором в середину уже введеной строки и там ввести символ то обрботка сработает неправильно. Вобщем спасибо!

Moloch 18.04.2015 12:21

а кстати такой вопрос. почему если я нажимаю клавишу enter в textarea то пишет недопустимый символ?

рони 18.04.2015 12:59

Moloch,
а перевод строки в ваших значениях есть?


Часовой пояс GMT +3, время: 10:51.