#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) вещи:
- нажатие кнопки submit вызвало событие onchange ebot и остановило процесс отправки
- событие onchange вызвало функцию chkEvent
- в окне предупреждения правильно отображалось введенное пользователем значение
Затем я восстановил исходную структуру 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 Хороший улов, хорошие глаза. Спасибо, еще раз!!