【发布时间】:2014-07-04 03:19:44
【问题描述】:
我正在使用 jquery 验证插件并使用此代码,当字段不符合所需规范时,我尝试触发一些错误
$(document).on('click', '#btn_save', function() {
$('form#new_inquiry').validate({
onkeyup: false,
errorClass: 'error',
validClass: 'valid',
highlight: function(element) {
$(element).closest('div').addClass("f_error");
},
unhighlight: function(element) {
$(element).closest('div').removeClass("f_error");
},
errorPlacement: function(error, element) {
$(element).closest('div').append(error);
},
rules: {
pname: { required: true },
pid: { required: true, min: 1 },
country: { required: true },
cid: { required: true, min: 1 },
city: { required: true },
delivery_date: {
require_from_group: [1, '.delivery']
},
delivery_text: {
require_from_group: [1, '.delivery']
},
address: { required: true },
content: { required: true }
},
messages: {
pname: "You must enter a customer name before saving",
country: "You must select a valid country",
city: "Please fill in the city",
address: "Please fill in the address",
content: "Please fill in the order content"
},
invalidHandler: function(form, validator) {
$.sticky("Inquiry cannot be saved for the moment. </br>Please corect errors marked up", {autoclose : 5000, position: "top-right", type: "st-error" });
},
submitHandler: function(form) {
$.ajax({
url: 'view/inquiry/inquiry_insert-exec.php',
type: 'post',
dataType: 'json',
data: $('form#new_inquiry').serialize(),
beforeSend: function() {
$('#amount').val($('#amount').val().toString().replace(/\,/g, '.'));
$('#btn_save').attr('disabled', true);
$('#btn_save').after('<span class="wait"> <img src="<?= DIR_MEDIA;?>img/ajax_loader.gif" alt="" /></span>');
},
complete: function() {
$('#btn_save').attr('disabled', false);
$('.wait').remove();
},
success: function(json) {
if (json['status']) {
if (json['id']) {
location = '?route=home/inquiry/insert&id='+json['id']+"&tab=#tab2";
//$('#myTab a[href="#tab2"]').tab('show');
} else {
location = '?route=home/inquiry';
}
} else {
$.sticky("There were errors while saving inquiry.</br>" + json['status'], {autoclose : 5000, position: "top-right", type: "st-error" });
}
}
});
}
});
if ($('#new_inquiry').valid()) {
}
});
但是,这段代码什么也没做。我想我在某个地方有错误,但我不明白它可能在哪里 我正在使用 Firebug 来跟踪错误,但单击 #btn_save 后仍然没有触发错误 validate() 在点击两个按钮时被检查,根据点击的一个,下一个事件会有所不同,所以在 click 事件内部使用了 valid() 函数,但仍然没有任何反应。我怎样才能看到错误,如果有的话?我猜如果代码什么都不做
【问题讨论】:
-
您应该在
$(document).ready()函数中调用.validate(),而不是在click处理程序中。该方法用于初始化插件,调用时并不实际进行验证。提交表单时会自动执行验证。 -
点击处理程序已经在 $(document).ready() 中,但是脚本很大,可以放在这里
-
但是您需要将此代码移到点击处理程序之外。请参阅文档中的示例。
-
好的,如果我将它移到点击处理程序之外,如何在点击时测试表单是否有效并且只在点击后提交表单?
-
验证插件会在您提交表单时自动为您执行此操作。但如果需要显式测试,请使用
if ($("#new_inquiry").valid())。