我有一个表单,其中特定字段需要服务器端和客户端验证。 我正在使用jquery验证插件来执行客户端验证。下面是相同的代码。
$('#createapp').validate({
rules: {
appname: {
minlength: 8,
required: true
},
apptitle: {
required: true
}
},
highlight: function(label) {
$(label).closest('.control-group').addClass('error');
},
success: function(label) {
label
.text('OK!').addClass('valid')
.closest('.control-group').addClass('success');
}
});
现在我需要检查用户尝试输入的appname是否已存在于DB中。我使用ajax使用此代码执行检查
$('#appname').focusout(function(){
$.ajax({
type: "POST",
url: "<?php echo base_url();?>index.php/app/application/check_app",
data: "appname="+$("#appname").val(),
success: function(msg){
if(msg == "false")
{
var controlDiv = $('#appname').closest('.control-group');
controlDiv.addClass('error');
controlDiv.removeClass('success');
}
else
{
var controlDiv = $('#appname').closest('.control-group');
controlDiv.addClass('success');
controlDiv.removeClass('error');
}
}
});
});
虽然这会使字段控件变红但不会停止表单提交。我不想复制服务器端的逻辑来检查并返回错误。
如果已经采用了应用名称,我可以在什么地方添加代码来禁用表单提交?
请帮助
答案 0 :(得分:2)
我可能会遗漏一些东西,但我认为你采取了错误的做法。 jQuery Validate支持远程验证,但您没有使用它。
请查看remote
规则。
答案 1 :(得分:0)
尝试使用$('#createapp').validate( ...code...).cancelSubmit = true;
答案 2 :(得分:0)
我猜你#createapp
是你的形式?如果是这样,如果已经取名,我会改变提交属性。
$('#appname').focusout(function(){
$.ajax({
type: "POST",
url: "<?php echo base_url();?>index.php/app/application/check_app",
data: "appname="+$("#appname").val(),
success: function(msg){
if(msg == "false")
{
var controlDiv = $('#appname').closest('.control-group');
controlDiv.addClass('error');
controlDiv.removeClass('success');
$('#createapp').attr('submit', 'return false;');
}
else
{
var controlDiv = $('#appname').closest('.control-group');
controlDiv.addClass('success');
controlDiv.removeClass('error');
}
}
});
});