Я написал проверку JS для одной из форм, где я ожидаю, что пользователь заполнит всего несколько полей. Код, как показано ниже. Я не ожидаю, что пользователь заполнит все поля. Проверка выполняется нормально, но при нажатии кнопки "Отправить" страница не перенаправляется на целевую. Цените, если кто-то может помочь мне найти расхождение здесь. Заранее спасибо.
Код JS:
RenderDomConfig : function(e) {
e.preventDefault();
const discount_threshold = e.target.elements.discount_threshold.value;
const discountThreshold = e.target.elements.discountThreshold.value;
const cpThreshold = e.target.elements.cpThreshold.value;
const markdownCpThreshold = e.target.elements.markdownCpThreshold.value;
const minInventoryThreshold = e.target.elements.minInventoryThreshold.value;
const variationMode = e.target.elements.variationMode.value;
if (discount_threshold < 0 || discount_threshold > 100){
alert("Please enter valid discount threshold between 0 to 100");
e.target.elements.discount_threshold.focus();
return false;
}
if (discountThreshold < -16 || discountThreshold > 100){
alert("Please enter valid discount threshold between -16 to 100");
e.target.elements.discountThreshold.focus();
return false;
}
if (cpThreshold < -16 || cpThreshold > 100){
alert("Please enter valid CP threshold between 0 to 100");
e.target.elements.cpThreshold.focus();
return false;
}
if (markdownCpThreshold < 0 || markdownCpThreshold > 100){
alert("Please enter valid markdownCpThreshold threshold between 0 to 100");
e.target.elements.markdownCpThreshold.focus();
return false;
}
if (minInventoryThreshold < 0 || minInventoryThreshold > 100){
alert("Please enter valid minimum Inventory Threshold between 0 to 100")
e.target.elements.minInventoryThreshold.focus();
return false;
}
if (variationMode == "disabled" || variationMode == "enabled" || variationMode == "" ){
return true;
}
else{
alert("Please enter valid variation mode: disabled or enabled");
e.target.elements.variationMode.focus();
return false;
}
return true;
}
}
Вызов кода JS:
<form action='/setDomConfig?marketplaceID=<%=@marketplace%>&propertyName=<%=@property_name%>&componentName=<%=@component_name%>&simLink=<%=@sim_link%>' onsubmit= "RenderDomConfigHelper.RenderDomConfig(event)" method="post">
Вам не нужно определять e.preventDefault();
,
Просто создайте мероприятие формы отправки следующим образом:
onsubmit = "return RenderDomConfigHelper.RenderDomConfig(event);"
Вы e.preventDefault();
формы с помощью e.preventDefault();
Один из способов сделать это - изменить тип кнопки отправки на кнопку, а затем, когда вы закончите проверку, вы можете отправить форму.
// click event for the button
document.f.validation.onclick = (e) => {
// validation code...
// when done submit the form.
document.f.submit();
};
<form name="f" action="success.php">
<input type="button" name="validation" value="Submit">
</form>
document.f.submit()
вызовет событие onsubmit формы, чтобы у вас все еще был этот код, он не будет работать, лучше, если вы сохраните его пустым или, по крайней мере, не добавите e.preventDefault();
к нему.
e.preventDefault();
предотвращает отправку / перенаправление формы, так что вы можете сделать это самостоятельно, и я не вижу кода, который это делает.