2015-03-06 3 views
0

Я хотел бы знать, если это возможно сделать для проверки такого типа jquery, может быть, потребуется отдельный метод.jquery проверяет свойства для проверки нескольких полей

Я проверяю три поля для номера телефона, для области, префикса и linenumber соответственно.

Итак, если ни одно из полей не введено, тогда проверка должна быть обойдена.

То, что у меня есть сейчас, проверяет, например, минимальную и максимальную длину каждого значения, но, например, если пользователь правильно вводит значение только в текстовом поле области, а затем оставьте остальные два текстовых поля пустыми, проверка не выполняется так как условия «выполнены», либо минимальные, либо макс.

Что я хочу достичь, если какое-либо из полей имеет значение, то все три поля должны иметь значение, если ни одно из них не имеет значений, тогда проверка неактивна.

Это то, что я до сих пор:

$(this).validate({ 
     rules: { 

      QUEST7_area: { 
       minlength: 3, 
       maxlength: 3 
      }, 
      QUEST7_prefix: { 
       minlength: 3, 
       maxlength: 3 
      }, 
      QUEST7_linenum: { 
       minlength: 4, 
       maxlength: 4 
      } 
     }, 
     errorPlacement: function (error, element) { 
      // invalid handler will place the error 
      var errorRect = $('div.errorrect'); 
      var message; 

      if ((element[0].id == "QUEST7_area") || (element[0].id == "QUEST7_prefix") || (element[0].id == "QUEST7_linenum")) { 
         var afterElement = $('#QUEST7_linenum'); 
         error.insertAfter(afterElement); 
         phoneErrorDisplayed = true; 
      } 

      if (isNullOrWhiteSpace(errorRect.text())) { 
       errorRect.text(message); 
      } 
     }, 
     messages: { 

      QUEST7_area: $('#QUEST7').data('errormsg'), 
      QUEST7_prefix: $('#QUEST7').data('errormsg'), 
      QUEST7_linenum: $('#QUEST7').data('errormsg'), 
     } 

    }); 

Любая идея, как я могу решить эту проблему?

+0

Метод '.validate()' является частью плагина jQuery Validate, а не механизма проверки jQuery. Будьте внимательны при пометке. Благодарю. – Sparky

ответ

0

So, if none of the fields are entered in then the validation should be bypassed. ... What I want to achieve is if any of the fields have value, then all three fields should have value, if none of them have values then validation is off.

В the additional-methods.js file, есть правило/метод называется skip_or_fill_minimum, который делает именно то, что вы, кажется, описания.

Правило позволит вам назначить минимальное количество полей required из заданной группы полей ... и если ни одна из них не заполнена, то все пропущены.

Этот метод принимает два параметра ...

1. мин Количество полей, которые должны быть заполнены из группы.

В вашем случае, это 3, так как мы хотим, чтобы все три завершенным, если таковые будут заполнены.

2. селектор, который определяет группу

В вашем случае input[name^='QUEST7'] автоматически выберет все input элементы, где nameначинается с"QUEST7". Конечно, вы можете назначить специальный класс или разработать подходящий селектор, который захватывает только эти три поля.

$(this).validate({ 
    rules: { 
     QUEST7_area: { 
      minlength: 3, 
      maxlength: 3, 
      skip_or_fill_minimum: [3,"input[name^='QUEST7']"] 
     }, 
     QUEST7_prefix: { 
      minlength: 3, 
      maxlength: 3, 
      skip_or_fill_minimum: [3,"input[name^='QUEST7']"] 
     }, 
     QUEST7_linenum: { 
      minlength: 4, 
      maxlength: 4, 
      skip_or_fill_minimum: [3,"input[name^='QUEST7']"] 
     } 
    }, 
    .... 

DEMO: http://jsfiddle.net/ktn6d7dd/

При желании, вы бы использовать groups и errorPlacement варианты консолидации и разместить одно сообщение об ошибке.

+0

ваш jsfiddle является правильным способом, как это должно работать, я получаю ошибку локально, он говорит: «TypeError: validator.elementValue не является функцией». Любая идея, почему это появляется? Thx – Laziale

+0

@ Laziale, не могу понять, что вы сделали неправильно, так что не знаю. Вы включили файл 'Дополнительные-методы.js'? Вы внимательно сравнили мой jsFiddle с кодом страницы?Вероятно, это синтаксическая ошибка в объектном литерале. – Sparky

+0

@ Laziale, оглядываясь на ваш OP, я уверен, что вы не можете определить пользовательские сообщения, используя jQuery. Вам нужно будет заключить внутри функции. Опять же, сравните my jsFiddle по строкам, где вы можете видеть, что я не определял настраиваемые сообщения, подобные этому. – Sparky

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