Проверка форм по общим правилам с использованием jQuery - PullRequest
1 голос
/ 07 декабря 2011

У меня есть несколько форм, все они имеют общие поля (например, email), и у каждого есть уникальные поля (например, uniqueFieldA в форме A и uniqueFieldB в форме B).

Что я хочу сделать: написать набор правил проверки (используя плагин проверки jQuery ) для общих полей один раз и "включить" эти правила внесколько мест (каждая форма), затем добавьте в правила, уникальные для этой конкретной формы.

Примерно так:

Упрощенный HTML:

<form id="formA">
  <input name="email" />
  <input name="uniqueFieldA" />
</form>

<form id="formB">
  <input name="email" />
  <input name="uniqueFieldB" />
</form>

JS:

// Define rules common to all forms
var commonRules = { 
  email: {
    required: true,
    email: true
  },
}

// Define rules for form A
$("#formA").validate({
   rules: {
     commonRules, //"include" common rules
     uniqueFieldA: "required" //rule unique to this form
   }
})

// Define rules for form B
$("#formB").validate({
   rules: {
     commonRules, //"include" common rules
     uniqueFieldB: "required" //rule unique to this form
   }
})

Что будет достигнуто (при условии использования полного правильного HTML)?

1 Ответ

4 голосов
/ 07 декабря 2011

Так как это не синтаксически правильный JavaScript ( JSLint мог бы сказать вам это), нет, он не будет работать.


$.extend твой друг здесь.Попробуйте это (не проверено):

// Define rules common to all forms
var commonRules = { 
  email: {
    required: true,
    email: true
  },
};

// Define rules for form A
$("#formA").validate({
   rules:  $.extend({
     uniqueFieldA: "required"
   }, commonRules)
});

// Define rules for form B
$("#formB").validate({
   rules: $.extend({
     uniqueFieldB: "required"
   }, commonRules)
});

Возможно, вам потребуется выполнить рекурсивное слияние («глубокое расширение»), если есть какое-либо совпадение между общими правилами и правилами, специфичными для формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...