我不想在提交表单后刷新页面,所以我使用了form.preventDefault();不要这样做。我想验证表单然后(如果它是有效的),我想调用后端函数(通过ajax)向数据库插入一个新行。
一切都适用于第一次提交,但是对于第二次验证,它不会触发远程验证,因此当我尝试添加与最后一次相同的下一个SN时,我能够做到这一点。我无法理解为什么没有触发远程验证,而其他验证(如最小字符/最大字符)被触发没有任何问题。
代码:
$("#form").validate({
onkeyup: false,
onfocusout: false,
rules: {
sn: {
required: true,
minlength: 8,
maxlength: 8,
remote: {
url: "ajax.php",
type: "get",
data: {
class: "board",
action: "IsFreeSN"
}
}
}
},
messages: {
sn: {
required: "SN is required",
minlength: "SN has to be 8 chars long",
maxlength: "SN has to be 8 chars long",
remote: "SN is already in database"
}
},
submitHandler: function(form) {
// Form is valid, so i am calling backend function for database insert
form.preventDefault(); // preventing page reload
}
});
正如我所说,当你第一次运行它(第一次提交)时,它有效。但是当你想再次这样做时(当然没有页面重新加载),它没有进行远程验证。
答案 0 :(得分:1)
我做到了。如果与最后一个值具有相同的值,则jQuery Validator不会触发远程验证。它在页面刷新或重置功能时重置。解决方案是使用:
var validator = $("#form").validate({ ... });
成功验证后调用:
validator.resetForm();
答案 1 :(得分:0)
我确实使用了这个。
jQuery.validator.addMethod("idTurnoEstaEnUso", function (value, element)
{
var url = '/nonrest/Turnos/IdTurnoValida';
var objetoIdTurno = { inputTextIdTurno: value };
var respuesta = null;
$.ajax({
async: false,
url: url,
type: 'post',
contentType: 'application/json',
data: ko.toJSON(objetoIdTurno),
success: function (data) {
if (data == true) {
respuesta = true;
} else {
respuesta = false;
}
},
error: function () {
respuesta = false;
}
});
if (respuesta == false) {
return this.optional(element) || respuesta;
}
if (respuesta == true) {
return this.optional(element) || respuesta;
}
}, "El código está ya en uso.");