Jquery 验证点击提交按钮两次 ASP.Net 核心 MVC 项目
Jquery validate click submit button twice ASP.Net core MVC project
我似乎找不到解决这个问题的方法。我进行了搜索,none 人采用的方法似乎适用于我的情况。
$(document).on("submit", "#createDriverForm", function (e) {
e.preventDefault();
$("#createDriverForm").validate({
ignore: null,
rules: {
driversLicenceCountryId: {
requiredselect: 0
},
driversLicenceNumber: "required",
firstName: "required",
lastName: "required",
genderId: {
requiredselect: 0
},
dateOfBirth: "required",
driversLicenceDateIssued: "required",
driversLicenceExpiryDate: "required",
driversLicenceTypeId: {
requiredselect: 0
},
driversLicenceFirstIssued: "required"
},
//For custom messages
messages: {
driversLicenceCountryId: {
requiredselect: "Please select your country of licence"
},
driversLicenceNumber: "Please enter driver's licence number",
firstName: "Please enter your first name",
lastName: "Please enter your last name",
genderId: "Please select your gender",
dateOfBirth: {
requiredselect: "Please enter your date of birth"
},
driversLicenceDateIssued: "Please enter your driver's licence issue date",
driversLicenceExpiryDate: "Please enter your driver's licence expiry date",
driversLicenceTypeId: {
requiredselect: "Please select licence type"
},
driversLicenceFirstIssued: "Please enter your driver's licence first issue date"
},
errorElement: "div",
errorPlacement: function (error, element) {
var placement = $(element).data('error');
if (placement) {
$(placement).append(error);
} else {
error.insertAfter(element);
}
},
submitHandler: function () {
var driverModal = $("[data-remodal-id=driver]").remodal();
$.ajax({
beforeSubmit: ProcessingModal("Saving driver details. Please hold...."),
type: "POST",
url: "/Quote/SaveDriverDetails",
data: $("#createDriverForm", modal).serialize(),
success: function (data) {
SuccessSwalWithCallback(data,
function () {
driverModal.close();
window.location.reload();
});
},
error: function (data) {
ErrorSwal(data.responseText);
}
});
},
invalidHandler: function (event, validator) {
Notice(`Please ensure all required fields are entered. Number of invalid fields: ${validator.numberOfInvalids()}`);
}
});
});
我有一个通过服务器动态呈现然后显示在模态上的表单。每当我单击表单上提交类型的保存按钮时。我意识到在触发验证效果之前我必须再次点击。我需要帮助来弄清楚要采取的方法。
注意。每当我取出
$(document).on("submit", "#createDriverForm", function (e)
然后表单正常发布并且页面重新加载并且不会触发验证。
编辑: 进一步了解如何在 DOM 上填充表单。
<div id="driverModal" class="remodal b-top-red" data-remodal-id="driver" style="max-width: 80%" data-remodal-options="closeOnOutsideClick: false">
<button data-remodal-action="close" class="remodal-close"></button>
<div id="driverContent"></div>
</div>
我有一个模式,每当用户单击页面上的 "View/Edit" 时,服务器就会 returns 通过 $("#driverContent").html(data)
<form id="createDriverForm">......</form>
。即数据是表格。当我说表单是动态呈现时,巩固我的解释。
您不需要 $(document).on("submit".....)。
如果“#createDriverForm”是一个元素,请将 submitHandler() 更改为以下内容。
https://jqueryvalidation.org/validate/
$("#createDriverForm").validate({
submitHandler: function(form) {
$(form).ajaxSubmit();
});
所以我想出了解决办法。必须检查何时首先填充带有表单的模态然后调用验证。
$(document).on("opened", "#driverModal", function(){});
检查模式何时打开然后我现在调用验证原因然后表单将存在于 DOM。
$(document).on("opened",
"#driverModal",
function () {
$("#createDriverForm").validate({
ignore: null,
rules: {
driversLicenceCountryId: {
requiredselect: 0
},
driversLicenceNumber: "required",
firstName: "required",
lastName: "required",
genderId: {
requiredselect: 0
},
dateOfBirth: "required",
driversLicenceDateIssued: {
required: true
},
driversLicenceExpiryDate: {
required: true
},
driversLicenceTypeId: {
requiredselect: 0
},
driversLicenceFirstIssued: "required"
},
//For custom messages
messages: {
driversLicenceCountryId: {
requiredselect: "Please select your country of licence"
},
driversLicenceNumber: "Please enter driver's licence number",
firstName: "Please enter your first name",
lastName: "Please enter your last name",
genderId: "Please select your gender",
dateOfBirth: {
requiredselect: "Please enter your date of birth"
},
driversLicenceDateIssued: "Please enter your driver's licence issue date",
driversLicenceExpiryDate: "Please enter your driver's licence expiry date",
driversLicenceTypeId: {
requiredselect: "Please select licence type"
},
driversLicenceFirstIssued: "Please enter your driver's licence first issue date"
},
errorElement: "div",
errorPlacement: function (error, element) {
var placement = $(element).data("error");
if (placement) {
$(placement).append(error);
} else {
error.insertAfter(element);
}
},
submitHandler: function (form) {
$.ajax({
beforeSubmit: ProcessingModal("Saving driver details. Please hold...."),
type: "POST",
url: "/Quote/SaveDriverDetails",
data: $(form).serialize(),
success: function (data) {
SuccessSwalWithCallback(data,
function () {
driverModal.close();
window.location.reload();
});
},
error: function (data) {
ErrorSwal(data.responseText);
}
});
},
invalidHandler: function (event, validator) {
Notice(`You seem to have missed ${validator
.numberOfInvalids()} field. Please enter the missing information`);
}
});
});
您需要将验证码放在 $(document).ready 函数上,这非常简单。所以它成为加载文档的一部分。何时单击相关提交按钮或何时使用任何方式提交表单。您将在第一次点击时点击验证码。
就这些
我似乎找不到解决这个问题的方法。我进行了搜索,none 人采用的方法似乎适用于我的情况。
$(document).on("submit", "#createDriverForm", function (e) {
e.preventDefault();
$("#createDriverForm").validate({
ignore: null,
rules: {
driversLicenceCountryId: {
requiredselect: 0
},
driversLicenceNumber: "required",
firstName: "required",
lastName: "required",
genderId: {
requiredselect: 0
},
dateOfBirth: "required",
driversLicenceDateIssued: "required",
driversLicenceExpiryDate: "required",
driversLicenceTypeId: {
requiredselect: 0
},
driversLicenceFirstIssued: "required"
},
//For custom messages
messages: {
driversLicenceCountryId: {
requiredselect: "Please select your country of licence"
},
driversLicenceNumber: "Please enter driver's licence number",
firstName: "Please enter your first name",
lastName: "Please enter your last name",
genderId: "Please select your gender",
dateOfBirth: {
requiredselect: "Please enter your date of birth"
},
driversLicenceDateIssued: "Please enter your driver's licence issue date",
driversLicenceExpiryDate: "Please enter your driver's licence expiry date",
driversLicenceTypeId: {
requiredselect: "Please select licence type"
},
driversLicenceFirstIssued: "Please enter your driver's licence first issue date"
},
errorElement: "div",
errorPlacement: function (error, element) {
var placement = $(element).data('error');
if (placement) {
$(placement).append(error);
} else {
error.insertAfter(element);
}
},
submitHandler: function () {
var driverModal = $("[data-remodal-id=driver]").remodal();
$.ajax({
beforeSubmit: ProcessingModal("Saving driver details. Please hold...."),
type: "POST",
url: "/Quote/SaveDriverDetails",
data: $("#createDriverForm", modal).serialize(),
success: function (data) {
SuccessSwalWithCallback(data,
function () {
driverModal.close();
window.location.reload();
});
},
error: function (data) {
ErrorSwal(data.responseText);
}
});
},
invalidHandler: function (event, validator) {
Notice(`Please ensure all required fields are entered. Number of invalid fields: ${validator.numberOfInvalids()}`);
}
});
});
我有一个通过服务器动态呈现然后显示在模态上的表单。每当我单击表单上提交类型的保存按钮时。我意识到在触发验证效果之前我必须再次点击。我需要帮助来弄清楚要采取的方法。
注意。每当我取出
$(document).on("submit", "#createDriverForm", function (e)
然后表单正常发布并且页面重新加载并且不会触发验证。
编辑: 进一步了解如何在 DOM 上填充表单。
<div id="driverModal" class="remodal b-top-red" data-remodal-id="driver" style="max-width: 80%" data-remodal-options="closeOnOutsideClick: false">
<button data-remodal-action="close" class="remodal-close"></button>
<div id="driverContent"></div>
</div>
我有一个模式,每当用户单击页面上的 "View/Edit" 时,服务器就会 returns 通过 $("#driverContent").html(data)
<form id="createDriverForm">......</form>
。即数据是表格。当我说表单是动态呈现时,巩固我的解释。
您不需要 $(document).on("submit".....)。 如果“#createDriverForm”是一个元素,请将 submitHandler() 更改为以下内容。 https://jqueryvalidation.org/validate/
$("#createDriverForm").validate({
submitHandler: function(form) {
$(form).ajaxSubmit();
});
所以我想出了解决办法。必须检查何时首先填充带有表单的模态然后调用验证。
$(document).on("opened", "#driverModal", function(){});
检查模式何时打开然后我现在调用验证原因然后表单将存在于 DOM。
$(document).on("opened",
"#driverModal",
function () {
$("#createDriverForm").validate({
ignore: null,
rules: {
driversLicenceCountryId: {
requiredselect: 0
},
driversLicenceNumber: "required",
firstName: "required",
lastName: "required",
genderId: {
requiredselect: 0
},
dateOfBirth: "required",
driversLicenceDateIssued: {
required: true
},
driversLicenceExpiryDate: {
required: true
},
driversLicenceTypeId: {
requiredselect: 0
},
driversLicenceFirstIssued: "required"
},
//For custom messages
messages: {
driversLicenceCountryId: {
requiredselect: "Please select your country of licence"
},
driversLicenceNumber: "Please enter driver's licence number",
firstName: "Please enter your first name",
lastName: "Please enter your last name",
genderId: "Please select your gender",
dateOfBirth: {
requiredselect: "Please enter your date of birth"
},
driversLicenceDateIssued: "Please enter your driver's licence issue date",
driversLicenceExpiryDate: "Please enter your driver's licence expiry date",
driversLicenceTypeId: {
requiredselect: "Please select licence type"
},
driversLicenceFirstIssued: "Please enter your driver's licence first issue date"
},
errorElement: "div",
errorPlacement: function (error, element) {
var placement = $(element).data("error");
if (placement) {
$(placement).append(error);
} else {
error.insertAfter(element);
}
},
submitHandler: function (form) {
$.ajax({
beforeSubmit: ProcessingModal("Saving driver details. Please hold...."),
type: "POST",
url: "/Quote/SaveDriverDetails",
data: $(form).serialize(),
success: function (data) {
SuccessSwalWithCallback(data,
function () {
driverModal.close();
window.location.reload();
});
},
error: function (data) {
ErrorSwal(data.responseText);
}
});
},
invalidHandler: function (event, validator) {
Notice(`You seem to have missed ${validator
.numberOfInvalids()} field. Please enter the missing information`);
}
});
});
您需要将验证码放在 $(document).ready 函数上,这非常简单。所以它成为加载文档的一部分。何时单击相关提交按钮或何时使用任何方式提交表单。您将在第一次点击时点击验证码。
就这些