2012-02-09 3 views
1

Текущий example из groups использования говорит, что errorPlacement следует определить, где жестко заданы имена полей:jQuery validate и groups - как избежать использования 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

Спасибо, Андрей. Это работает хорошо! –

+0

@ LA_: Не проблема! Спасибо за интересную проблему ':)' –

+0

Я только что нашел другую проблему - код выше хорошо работает с элементами, входящими в группу. Но в случае, если это единственный элемент, тогда сообщение msg не отображается. Есть ли способ исправить это? См. Пример - http://jsbin.com/emipos/2 (последнее поле обязательно, но сообщение msg не отображается). –

Смежные вопросы