2011-03-04 49 views
2

我使用的jquery驗證插件,我想錯誤旁邊的無效表單元素。但是,我也想要在表單頂部列出所有錯誤。jQuery驗證 - 在窗體的頂部和每個元素的錯誤消息

選項設置似乎只是讓你做一個或另一個,但不是兩個。

因此,如果有一種方法來設置選項,以便發生這種情況,那將很容易解決問題!


爲了避免這個搞定了,我寫的jQuery的片段採取的錯誤信息,並將它們添加到窗體頂部(並將其鏈接到錯誤位置)。但是,當我嘗試在validate方法中調用此函數(使用invalidHandler或errorPlacement處理程序)時,一切正常,但表單已提交。我不想提交表單,因爲jQuery在那裏驗證客戶端。

我的驗證的選項是這樣的:

$("#memberRegistration").validate({ 
    invalidHandler: function(form, validator) { 
     var errors = validator.numberOfInvalids(); 
     if (errors) { 
      var message = errors == 1 
        ? 'You missed 1 field. It has been highlighted' 
        : 'You missed ' + errors + ' fields. They have been highlighted'; 
      $("div.errorBox span").html(message); 
     } 
     $("div.errorBox").removeClass('noDisplay'); 
     errorCopy();     // <-- my custom function 
    }, 
    wrapper: "div", 
    errorPlacement: function(error, element) { 
     element = element.closest('li'); 
     element = element.children(':first-child'); 
     error.insertBefore(element); 
     error.addClass('message');  
    }, 
    meta: "validate", 
    rules: { 
     "memberRegistrationFormDetails.Title": { required: true }, 

爲什麼我不能調用從invalidHandler或errorPlacement處理程序沒有形式的功能被提交?

謝謝!

+0

頁面上是否有腳本錯誤?你確定這個函數是被定義的嗎? – 2011-03-04 16:10:14

+0

函數已定義,但我不確定定義是否被找到。無論如何,找到了另一個解決方案如下。謝謝! – tomunderhill 2011-03-07 09:54:43

回答

2

找到了解決方案。我加入了相關代碼直奔errorPlacement處理程序,而無需調用來自其他地方的功能,並與一些修改:

errorPlacement: function(error, element) { 
     element = element.closest('li'); 
     element = element.children(':first-child'); 
     error.insertBefore(element); 
     error.addClass('message'); 
     $(function() {         // my function 
      var errorIndex = $(error).index('div'); 
      var errorId = 'errordiv' + errorIndex.toString(); 
      $(error).attr('id', errorId); 
      $('.errorList').append('<li><a href="#' + errorId + '">' + $(error).text() + '</a></li>'); 
     });  
    }, 

這段代碼使用錯誤消息和的頂部增加了一個鏈接到我的errorList容器形成。