2011-07-27 33 views
1

我使用验证插件很多 - 它很棒。 我目前的设置,是一个修复“封闭”框,其中包含字段。 我想要做的是,如果框中包含未填写的必填字段,应打开试图提交的框。jquery validate()问题

这是我的代码:

$("#ftblSubGroupsadd").validate({ 
    invalidHandler: function(form, validator) { 
     alert('Note, a few mandatory fields remain un-answered. You may have to open some closed boxes'); 
     $("label.error").closest("div[class=inside]").css("display","block"); 
     $("label.error").closest("div.boxed").removeClass().addClass('box'); 
    } 
    }); 

here是一个在线演示。

奇怪的是,当你第一次尝试submkit时,你所得到的就是alert()。 但是你马上点击提交,你会得到警报(),只有这样,打开/显示代码功能,并打开框。

有人能为我介绍一下为什么会出现这种情况吗?

谢谢!

+0

不要使用'.removeClass()',它将删除'error'类,它必须在出错时停止。而是使用'.removeClass(validClass).addClass(errorClass);' – diEcho

回答

1

OK,有人帮我一个名单,这代码似乎工作:

$("#ftblSubGroupsadd").validate({ 
    showErrors: function(){ 
     this.defaultShowErrors(); 
     //alert('Note, a few mandatory fields remain un-answered. You may have to open some closed boxes'); 
     $("label.error").closest("div[class=inside]").css("display","block"); 
     $("label.error").closest("div.boxed").removeClass().addClass('box'); 
    } 
    }); 
3

我认为问题在于,在您的代码执行后添加了类label.error:这是第一次运行不正确的原因以及第二次运行正常的原因。

编辑 - 我发现了一个解决方案(我认为):

$("#ftblSubGroupsadd").validate({ 
    invalidHandler: function(form, validator) { 
     alert('Note, a few mandatory fields remain un-answered. You may have to open some closed boxes'); 
     $.each(validator.currentElements, function(i, el){ 
      if(! validator.element(el)){ 
       $(el).closest("div[class=inside]").css("display", "block"); 
       $(el).closest("div.boxed").removeClass().addClass('box'); 
      } 
     }); 

    } 
}); 

看小提琴:http://jsfiddle.net/nicolapeluchetti/3Vw4y/4/

+0

mmm ...有趣的Nicola。 是否有某种live()方法可以用来克服这个问题? – kneidels

+0

如果你明天早上在jsfiddle.net上发布你的代码,我会看看某种解决方案,现在我在手机上!:) –

+0

谢谢,我明白了。它是我第一次在那里发布,所以希望它能成功。 URL:http://jsfiddle.net/kneidels/3Vw4y/2/ – kneidels