Любопытное поведение события ‘onchange’

#javascript #html #forms

#javascript #HTML #формы

Вопрос:

Последнее поле ввода HTML5 перед кнопкой отправки формы — это спам-фильтр, предлагающий пользователю решить простое алгебраическое уравнение, которое принимает значение 4, прежде чем отправлять форму на отдельную страницу для обработки php. Поле ввода (type = number, name = ebot) отслеживает событие onchange и, если обнаружено, вызывает функцию. Когда я ввел недопустимое значение и нажал «отправить», форма была передана на php.

Затем я урезал функцию, как указано ниже, чтобы выяснить, почему.

 function chkEvent() {
  var elemValue = document.forms['eFields']['eBot'].value;
  alert(elemValue);
}
  

Теперь ввод чего-либо в поле ввода (ebot) подтвердил три (3) вещи:

  1. нажатие кнопки submit вызвало событие onchange ebot и остановило процесс отправки
  2. событие onchange вызвало функцию chkEvent
  3. в окне предупреждения правильно отображалось введенное пользователем значение

Затем я восстановил исходную структуру chkEvent.

 function chkEvent() {
  var elemValue = document.forms['eFields']['eBot'].value;
  if(elemValue <> 4) {
    document.eFields.esubmit.disabled=true;
    alert("Please solve correctly for x.");
  } else {
    document.eFields.esubmit.disabled=false;
  }
}
  

Теперь, независимо от того, что введено в фильтр нежелательной почты, форма переходит на php при нажатии кнопки отправки. Такое же поведение наблюдается в Chrome, Firefox и IE. Возможно, я слишком долго смотрел на это, но, пожалуйста, никаких предложений, отличных от JavaScript. Временные ограничения не позволяют мне изучать новый язык.

Я часто извлекал выгоду из огромного мастерства и опыта на этом форуме. Спасибо всем!!

Комментарии:

1. Я скажу, что то, что вы делаете, вероятно, заблокирует около 1% вашего спам-трафика, поскольку большинство спам-ботов даже не запускают реальный браузер, не говоря уже о том, чтобы подчиняться JS-коду на странице, который может заблокировать отправку формы. Они просто очищают содержимое формы, отправляют переменные непосредственно в ваш сценарий action=»» и переходят к следующей странице.

2. Что сказал @Brian. Во всяком случае, вы должны использовать JavaScript для отправки формы, а не блокировать ее. Но затем вы блокируете всех, у кого отключен JS.

3. Также попробуйте изменить if(elemValue <> 4) { на if(elemValue == 4) { или, возможно, изменить 4 на '4' Я полагаю, что тип, возвращаемый из текстового ввода, представляет собой строку, а не целое число, поэтому вы можете столкнуться с проблемой типа.

4. Ваш код не выполняется, потому что он содержит синтаксические ошибки, и имеет место поведение кнопки отправки по умолчанию. Просто загляните в консоль вашего браузера.

5. @Brian Я думаю, что он / она собирается elemValue !== '4' .

Ответ №1:

<> недопустимый оператор javascript. Используйте != вместо этого, предполагая, что вы имели <> в виду «не равно».

Комментарии:

1. Спасибо, Джонатан. Я должным образом отправился в дровяной сарай, где повторил 5 раз: «JavaScript — это не php, JavaScript — это не php …» : -D Хороший улов, хорошие глаза. Спасибо, еще раз!!