最近项目中使用了jquery验证进行验证,bootstrap和Jquery表单的结合感觉不错。但是远程认证的缓存问题让我头疼了很久,几乎就像放弃这个插件一样。例:现有学校、年级、班级实体在同一学校下不能有同一个年级,同一年级下不能有同一个班级。例如,在验证时,使用远程方法:JS复制代码如下:“grade id”: {必选3360 true,min : 0,remote : { URL : ' grade manager-check grade . action ',type: 'post ',dataType: ' json ',data : { ' grade id ' : function(){ return $(' # grade id ')。val();},' schoolId' :函数(){ return $('#schoolId ')。val();}}}} HTML复制代码如下: div class=' control-group ' Label class=' control-Label ' for=' school id ' school/Label class=' controls ' s : select name=' school id ' list=' school ' list key=' school id ' list value=' school name ' headerkey='-1 ' header value='请选择一所学校'/s : select/div/div class=' control-group ' Label class=' control-Label ' for=' grade ' label class=' controls ' s 3360 select name=' grade id ' list=' grade ' list key=' grade id ' list value=' grade name ' header key='-1 ' header value='请选择一个年级'/s 3360 select/div/div现在有两个学校,即测试学校1和测试学校2,其中测试学校1有两个年级,即一年级和二年级。 理论上,新增年级时,如果学校选择考校一,远程验证在选择一、二年级时会报错,“该年级已经存在”。其实第一次操作时的结果是正确的。
但是,如果此时再次更改学校,例如选择test school 2,由于缓存问题,验证插件不会执行新的远程验证,而是直接返回上次验证的结果,因此出现以下错误。
这并不是最难接受的。对于比较严重的问题,如果先选择小学二年级和一年级的考校,远程验证会通过,再选择一年级的考校,远程验证还是会通过。这样一来,如果不能在同一个学校进行同一个等级的验证,那就是失败,所以你进行了各种查询解决方案。有句话说‘cache:false’是添加到remote的。然而,实际测量并没有解决问题。我尝试在学校的下拉框中绑定onchange事件,清空gradeId值,但还是解决不了问题。经过查阅api的验证,我发现。valid()方法可以主动触发验证。然而,由于缓存问题,远程仍然没有重新验证和检查验证的源代码。里面有一个前值。如果有值,会直接返回之前的验证结果。
所以我尝试清空这个值,并复制了如下代码: $ ('# schoolid ')。change (function () {$ ('# gradeid '))。removedata('上一个值');});成功解决问题。