валидация формы javascript. Не срабатывает e.preventDefault()

239
20 марта 2017, 09:37

После валидации форма отправляется в любом случае. Где что не так?

Код

<form action="" method="post" name="comment_form">
  <div class="input-group">
    <input type="text" name="first_name" value="" placeholder="Имя">
  </div>
  <div class="input-group">
    <input type="text" name="last_name" value="" placeholder="Фамилия">
  </div>
  <div class="input-group select-wrapper">
    <div class="select-arrow"></div>
    <select name="region_id" id="regions" onchange="get_cities()">
      <option disabled selected>Выберите регион</option>
    </select>
  </div>
  <div class="input-group select-wrapper">
    <div class="select-arrow"></div>
    <select type="text" name="city_id" id="cities" placeholder="Город">
    </select>
  </div>
  <div class="input-group">
    <input type="text" name="phone" value="" placeholder="Телефон">
    <small>в формате: (код города) номер</small>
  </div>
  <div class="input-group">
    <input type="email" name="email" value="" placeholder="Email">
  </div>
  <div class="input-group">
    <textarea name="comment" placeholder="Комментарий"></textarea>
  </div>
  <div class="input-group">
    <button class="button" type="submit">Отправить</button>
  </div>
</form>

Javascript

function validateForm(e) {
  var formElems = this.elements,
    i = 0,
    is_valid = true,
    tmp_valid = true;
  for (; i < formElems.length; i++) {
    var elem = formElems[i];
    if (elem.name == "first_name" || elem.name == "last_name" || elem.name == "comment") {
      if (formElems[i].value.trim() === '') {
        formElems[i].style.borderColor = 'red';
        tmp_valid = false;
        if (is_valid)
          is_valid = tmp_valid;
      }
    } else if (elem.name == 'phone') {
      if (val.trim() != '') {
        var re = /^\(([\d]{3,4})\)\ ([\d\ \-]{6,9})$/;
        if (!val.match(re)) {
          tmp_valid = false;
        }
      }
      if (!tmp_valid)
        is_valid = tmp_valid;
      if (!tmp_valid)
        elem.style.borderColor = 'red';
    }
  }
  if (!is_valid) e.preventDefault();
}
comment_form.addEventListener('submit', validateForm, false);
Answer 1

Вы переменную val нигде не объявили.

READ ALSO
Превратности функции Canvas

Превратности функции Canvas

Скорее хочу поделиться, хотя неплохо было бы и узнать ответНа днях столкнулся с интересной особенностью Canvas-a

211
Как в HTML артибут data-id=&ldquo; &rdquo; записать значение

Как в HTML артибут data-id=“ ” записать значение

Пользователь вводит с клавиатуры, после этого происходит событи, которое добавляет в массив {id: 0, name: '123'} и добавляет в DOM дерево:

199
socket.io connect к удаленному серверу

socket.io connect к удаленному серверу

пытаюсь подконектиться к wss://socketcsgoexclusive

318