2012-08-09 26 views
0

我有一个网页,其唯一的输入是一个PO。他们必须输入采购订单,并且必须包含字母,数字,短划线,下划线和/或句点,并且长度必须在2到15个字符之间。我相信我拥有所有与我继承的代码(我是jQuery新手)一起工作。jQuery验证 - 标准要求但也是一个警告

但是,如果所有这些测试都通过了,我还需要对我们的数据库进行远程测试,看看用户的公司是否已经使用了该PO。如果他们有,我需要警告他们,让他们选择输入不同的值或提交输入的值。这是我卡住的地方。

$(document).ready(function(){ 
$.validator.addMethod("noSpecialChars", function(value, element) { 
    return this.optional(element) || /^[a-zA-Z0-9-_.]+$/i.test(value); 
}, "Ignored"); 

jQuery.validator.messages.required = ""; 
$("#form1").validate({ 
    invalidHandler: function(e, validator) { 
     var errors = validator.numberOfInvalids(); 

     if (errors) { 
      var message = errors == 1 
       ? 'PO must contain only letters, numbers, dashed, underscores or periods and must be between 2 and 15 characters long.' 
       : 'You missed ' + errors + ' fields. They have been highlighted below'; 
      $("div.productError span").html(message); 
      $("div.productError").show(); 
     } else { 
      $("div.productError").hide(); 
     } 
    }, 

    onkeyup: false, 
    submitHandler: function(form) { 
     $("div.productError").hide(); 
     form.submit(); 
    }, 

    rules: { 
     po_number: { 
      required: true, 
      noSpecialChars: true, 
      rangelength:[2,15] 
     } 
    }, 

    messages: { 
     po_number: { 
      required: 'blah', 
      noSpecialChars: 'blah', 
      rangelength: 'blah' 
     } 
    }, 
    debug:true 
}); 

});

回答

0

现在更清楚了。

考虑到您的意见并在文档中稍微阅读,我建议在.submitHandler表单上调用第二个验证。

看看文档,只有当表单实际上是有效的,也就是您的检查返回true后,才会调用该回调。然后,在提交表单之前,您可以执行另一次检查,如果该表单也返回true,请提交表单。无论您需要对客户说什么,都可以弹出。

从DOC:

回调处理实际提交当表单有效。获取表单作为唯一的参数。 替换默认提交。经过验证后,通过Ajax提交表单的正确位置。

第二个大胆的部分让我对你的代码有点怀疑......你似乎再次重新提交表单,因此将它传递给另一个验证。也许我弄错了那部分。如果是这样,我表示歉意。

+0

我明白,我需要做一个远程规则。我不明白的是,如何获得验证来运行执行所需逻辑的第一遍(我上面已经说过),如果通过,然后运行第二个(嵌套?)验证来执行远程测试,并且if它失败(PO#已经存在),弹出一个框,警告它们重试或继续的能力。问题是有一个子验证(或其他)。 – 2012-08-09 17:00:46

+0

@ user1588106通知您我的答案已更改。我相信系统不会通知你。 – Kiruse 2012-08-10 01:56:13

0

如果您正在使用jQuery插件验证,那么你可以很容易地使用remote method这样做

+0

也许是因为我是jQuery的noob,但我该如何做所需的测试(现在它是这样做的),如果它们都通过了,那么那么做一个有条件的远程测试?除非所需的测试全部通过,否则我不希望远程测试关闭。它有条件地解除了第二个子验证,让我挠了挠头。 – 2012-08-09 18:46:47