Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.04.2015, 00:11
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

Обработка полей формы
Здравствуйте подскажите пожалуйста как реализовать след. задачу . есть форма следующего вида
<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 (ее нажатие разрешено) оставшиеся символы, скрипт каждый раз выводит алерт с чаркодом этого самого неразрешенного символа. Как исправить эту проблему?
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2015, 00:38
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

и сразу попутный вопрос как задать в массиве у элемента диапазон значений [65-122] . чтобы можно было функцией find_in_array пробежать по всем элементам основного массива и также по всем элементам массива [65-122]?
Ответить с цитированием
  #3 (permalink)  
Старый 17.04.2015, 01:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>
Ответить с цитированием
  #4 (permalink)  
Старый 17.04.2015, 19:19
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

Я походу выбрал неправильное событие для обработки. Проверку я выполнял по событию keyup и если символ был неразрешеным, то удалял этот самый последний символ из value того или иного инпута. Но тут концепция не верна т.к. событие keyup может вообще не произойти если зажать клавиши или если кликнуть курсором в середину уже введеной строки и там ввести символ то обрботка сработает неправильно. Вобщем спасибо!
Ответить с цитированием
  #5 (permalink)  
Старый 18.04.2015, 12:21
Аспирант
Отправить личное сообщение для Moloch Посмотреть профиль Найти все сообщения от Moloch
 
Регистрация: 29.10.2013
Сообщений: 94

а кстати такой вопрос. почему если я нажимаю клавишу enter в textarea то пишет недопустимый символ?
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2015, 12:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать проверку всех полей формы при нажатии кнопки sss2019 Общие вопросы Javascript 2 04.01.2014 02:00
проверка формы на изменение полей, кроме одного! cmygeHm ExtJS 14 13.04.2011 18:27
Проверка полей отправляемой формы. denisOgr jQuery 6 18.10.2010 19:40
Собрать значения всех полей формы vvsh Events/DOM/Window 3 09.11.2009 00:35
проверка полей формы!!!! DENAT Общие вопросы Javascript 0 05.06.2008 22:14