字段验证 - 服务器端和客户端

时间:2012-05-03 18:32:53

标签: validation jquery jquery-validate

我有一个表单,其中特定字段需要服务器端和客户端验证。 我正在使用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');
            }
        }
    });
});

虽然这会使字段控件变红但不会停止表单提交。我不想复制服务器端的逻辑来检查并返回错误。

如果已经采用了应用名称,我可以在什么地方添加代码来禁用表单提交?

请帮助

3 个答案:

答案 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');
            }
        }
    });
});