Проверка jQuery: правила абстрагирования - PullRequest
2 голосов
/ 11 июня 2010

Я использую проверку jQuery, которую можно найти здесь: http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules

В настоящее время у меня настроены некоторые из моих «пользовательских» правил, например:

else if(valID =="#shipForm")
        {
            $("#fName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}});
            $("#lName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}});
            $("#sAdd1").rules("add",{stringCheck: "",minlength:2,messages:{minlength:"Enter your complete street address."}});
            $("#sAdd2").rules("add",{stringCheck: ""});
            $("#city").rules("add",{stringCheck: "",minlength:2,messages:{minlength:"Enter the full name of your city"}});
            $("#zipcode").rules("add",{stripZip: ""});
            $("#phoneIn").rules("add",{stripPhone: "",maxlength:15,messages:{maxlength:"Phone number exceeds allowed length"}});
            $("#altPhone").rules("add",{stripPhone: ""});
            $("#state").rules("add",{checkMenu: ""});
            $("#country").rules("add",{checkMenu: ""});
        }

На что я надеялсяделать .. абстрагирует .rules и возможность извлечь их из функции.Моя проблема в том, что они не просто строки, поэтому мне не хватает представления о том, как я мог бы извлечь информацию из другой функции и заполнить .rules («переданное значение правила»)

Это не работает, но этопример чего-то, на что я как бы надеялся

function getRule(rule)
{
    switch (rule)
    {
        case "fName":
            return "\"add\",{regexName: \"^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$\",minlength: 2,messages:{minlength:\"Must be 2 characters.\"}}";
            break;
    }
}

Но я, очевидно, не могу просто передать строку назад и запустить ее обратно в .rules.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 11 июня 2010

Вы можете вернуть объект

function getRule(rule) 
{ 
    switch (rule) 
    { 
        case "fName": 
            return {
               param1 : "add", 
               param2 : {
                    regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",
                    minlength: 2,
                    messages:{
                         minlength:"Must be 2 characters."
                    }
                }
            }; 
    } 
} 

, теперь, если вы вызовете getRule, он вернет объект, подобный этому

var myruleDef = getRule(rule);

$(selector).rules(myruleDef.param1, myruleDef.param2);
0 голосов
/ 11 июня 2010

Вы можете хранить свои правила на карте:

var rules = {
    fName: {
        regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",
        minlength: 2,
        messages: {
            minlength: "Must be 2 characters."
        }
    },
    lName: { // ... }
    // ...
};

И применить их все с:

for (var id in rules) {
    $("#" + id).rules("add", rules[id]);
}

Примечание: вам не нужно break после return.

Примечание 2: Оберните и сделайте отступ для литералов вашего объекта для удобства чтения.

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