2011-07-27 57 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