Чтобы это сработало, сначала подключите событие submit
элемента form
, а не click
button
.Затем в логическом else
вызове preventDefault()
о событии, чтобы остановить отправку формы.
Также обратите внимание, что вы можете кэшировать селектор #somediv
, а также СУШИТЕ вверх вызов setTimeout()
.Попробуйте это:
$(document).ready(function() {
var $div = $('#somediv');
$("form").on('submit', function(e) {
var timeoutDelay;
if ($('#field > div.field-item:contains("someText")').length > 0) {
$div.removeClass("button button4").addClass("button button2").text("DOWNLOAD");
timeoutDelay = 8000;
} else {
e.preventDefault();
$div.removeClass("button button4").addClass("button button3").text("THIS IS NOT VALID");
timeoutDelay = 1000;
}
setTimeout(() => {
$div.removeClass("button button3").addClass("button button4").text("CHECK URL");
location.reload();
}, timeoutDelay);
});
});
Есть пара вещей, на которые стоит обратить внимание.Во-первых, это очень ненадежный метод проверки.Я настоятельно рекомендую пересмотреть способ включения отправки.
Во-вторых, если проверка прошла успешно, форма будет отправлена немедленно, поэтому ваша 8-секундная задержка по таймауту и location.reload()
полностью избыточны.