checkForm()
срабатывает при нажатии кнопки, но при загрузке страницы используются значения (formCompleted
, formIncomplete
), определенные ранее. Таким образом, вы можете заполнить форму, но эти переменные не обновляются, и при нажатии кнопки используются старые значения, которые были установлены при первой загрузке страницы.
Вместо этого проверьте состояния ввода и определите эти переменные внутри вашей checkForm()
функции, чтобы они были настроены как фактические, текущие результаты при нажатии кнопки. Затем тесты оценивают, как выглядит форма во время нажатия кнопки.
function checkForm() {
let formCompleted = $.trim($('#goa-form input[required]').val()) == !'';
let formIncomplete = $.trim($('#goa-form input[required]').val()) == '';
// ... rest of your code ...
Обновление
Вот работающий JSFiddle .
Примечания:
Вы используете сочетание простых JS и jQuery. В этом нет ничего технически неправильного, но, конечно, было бы легче читать и поддерживать, если бы вы придерживались одного. Если вы собираетесь принять удар при загрузке jQuery (дополнительный запрос http, лишний дополнительный ресурс 90 КБ и т. Д. c), вы также можете использовать его.
Я не являюсь конечно, если он действительно недействителен, но тест formCompleted
кажется неправильным. Я бы использовал стандартный !== ''
вместо == !''
(я сделал это в JSFiddle);
Если вы собираетесь использовать сравнение типов для formCompleted
, вы должны быть последовательны, а также использовать это для formIncomplete
, ie использовать === ''
(я сделал это в JSFiddle);
Не используйте оба встроенных onClick()
на кнопке, и добавьте addEventListener
в ваш JS. Они оба делают одно и то же, используют только один из них. Смешивать JS с вашим HTML считается плохой практикой, поэтому лучше использовать обычный JS addEventListener
(или jQuery .on()
). Я удалил встроенный из JSFiddle.