2010-10-07 2 views
0

Я использую jQuery validation plugin для проверки моей формы на стороне клиента. Я добавляю новый метод, используя функцию addMethod для каждого элемента управления HTML, который имеет регулярный (пользовательский) атрибут. Мой HTML-контроль будет выглядеть.jQuery validation plugin

<input type="text" id="txtInf" name="txtInf" regex="some regular exp" error="check your inf"></input> 

$("*[regex]").each(function() { 
        var controlId = $(this).attr('name');  
        var regex = new RegExp((this).attr('regex'));  
        var error = $(this).attr('error');  

      $.validator.addMethod(controlId, function (value, element) { 

       return this.optional(element) || false; 

      }, error); 

      $(this).rules("add", { '" + controlId + "': "^[a-zA-Z'.\s]{1,40}$" }); 

      $(this).validate(); 
     }); 

Здесь я даю имя метода, как ControlID, который txtInf. В строке ниже мне нужно указать txtInf, но вместо этого я хочу использовать переменную controlId, так как хочу сделать эту функцию общей. Но если я пишу controlId напрямую, он ищет метод с тем же. Но добавленный метод фактически является txtInf. Поэтому мне нужно каким-то образом обобщить эту строку, используя переменную controlId.

$(this).rules("add", {txtInf: "^[a-zA-Z'.\s]{1,40}$" }); 

ответ

0

Проблема в том, что вы не можете использовать имя переменной для ссылки в объектном литерале. То, что я делал в прошлом, когда мне нужно сделать что-то подобное, - это вручную создать строку JSON и передать ее через parseJSON. это будет выглядеть примерно так:

$(this).rules("add", $.parseJSON('{"' + controlId + '":"^[a-zA-Z\'.\s]{1,40}$" }');