2012-02-09 77 views
1

groups使用的電流exampleerrorPlacement應該被定義,其中的字段的名稱是硬編碼:jQuery驗證和組 - 如何避免errorPlacement使用?

$("#myform").validate({ 
    groups: { 
    username: "fname lname" 
    }, 
    errorPlacement: function(error, element) { 
    if (element.attr("name") == "fname" 
       || element.attr("name") == "lname") 
     error.insertAfter("#lastname"); 
    else 
     error.insertAfter(element); 
    }, 
    debug:true 
}) 

有沒有什麼辦法讓字段名爲擺脫這種errorPlacement的?錯誤消息應始終放在組中的最後一個元素之後。

回答

4

我認爲你將不得不使用errorPlacement,但你可以拉出一些技巧,每次得到的錯誤以一致的地方羣體中:

$("#test-form").validate({ 
    groups: { 
     username: "fname lname", 
     range: "min max" 
    }, 
    errorPlacement: function ($error, $element) { 
     var elementName = $element.attr("name"), 
      lastInGroup = $.map(this.groups, function(fields, name) { 
      var fieldsArr; 
      if (fields.indexOf(elementName) >= 0) { 
       fieldsArr = fields.split(" "); 
       return fieldsArr[fieldsArr.length - 1]; 
      } else { 
       return null; 
      } 
      })[0]; 

     if (lastInGroup) {  
      $error.insertAfter($("input[name='" + lastInGroup + "']")); 
     } else { 
      $error.insertAfter($element); 
     } 
    } 
}); 

基本上,訪問groups對象您已經定義並找到每個組中的最後一個字段。在該字段後附加錯誤。

例子:http://jsbin.com/acenic/

+0

謝謝你,安德魯。它運作良好! – 2012-02-10 17:01:41

+0

@LA_:沒問題!感謝這個有趣的問題':)' – 2012-02-10 17:03:32

+0

我剛剛發現了另一個問題 - 上面的代碼適用於組件的一部分。但是,如果這是單個元素,則僅顯示錯誤消息。有什麼方法可以解決它嗎?請參閱示例 - http://jsbin.com/emipos/2(最後一個字段是必填字段,但錯誤消息未顯示)。 – 2012-02-18 10:43:25