2015-06-07 4 views
0

У меня есть несколько вопросов, полностью проверяющих мои данные с помощью плагина validator.
У меня 2 поля; fieldOne и fieldTwo. Затем у меня есть 2 файла PHP, process.php и processfailed.php.Условия проверки плагинов JQuery Validator

Теперь у меня есть довольно много условий.

Если fieldOne и fieldTwo оба пустые, я хочу, чтобы ошибка отображалась пользователю, но не был вызван PHP-файл.

Если какое-либо из полей имеет действительные данные, а другое имеет недопустимые данные или пустое, я хочу, чтобы он вызывал process.php (я не хочу, чтобы произошла ошибка проверки).

Только если оба поля имеют неверные данные, я хочу, чтобы processfailed.php вызывался из-за события ошибки проверки.

код у меня до сих пор это (удалены некоторые разделы, чтобы сократить его)

var validator = $("#my_form").validate({ 
    rules: { 
     fieldOne: { 
      require_from_group: [1, '.datagroup'], 
      maxlength: 40 
     }, 
     fieldTwo: { 
      require_from_group: [1, '.datagroup'], 
      minlength: 8 
     } 
    }, 
    groups: { 
     datagroup: "fieldOne fieldTwo" 
    }, 
    submitHandler: function (form) { 
     $.ajax({ 
      type: "POST", 
      url: "process.php", 
      data: { 
       'fieldOne': $("#fieldOne").val(), 
       'fieldTwo': $("#fieldTwo").val() 
      } 
     }) 
     return false; 
    }, 
    invalidHandler: function (form, validator) { 
     /* Submit the form even if validation fails: */ 
     $.ajax({ 
      type: "POST", 
      url: "processfailed.php", 
      data: { 
       'fieldOne': $("#fieldOne").val(), 
       'fieldTwo': $("#fieldTwo").val() 
      } 
     }) 
     return false; 
    } 
}); 

В отношении них оба они пусты, в данный момент отображается сообщение об ошибке для пользователя, но также появляется также вызывать processfailed.php (я не хочу, чтобы в этой ситуации вызывался любой файл php).

Если я даю действительные данные одному полю и оставляю пустым, это, похоже, сработает.

Если я передаю действительные данные в одно поле и передаю неверные данные другому, это, как представляется, вызывает processfailed.php, когда он должен вызывать process.php (если одно поле действительно, это нормально).

Если я даю неверные данные обоим полям (они оба не проверяют проверку подлинности), processfailed.php, похоже, вызывается как и должно быть.

Итак, как я могу обрабатывать оба поля пустым (не для вызова какого-либо php-файла), и если одно поле является допустимым, а другое недопустимым для вызова process.php, а не processfailed.php.

Любые советы, оцененные.

ответ

1

Для первого условия, когда оба поля пусты, вы можете просто поместить оператор if в метод invalidHandler.

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

$("#my_form").validate({ 
    rules: { 
     fieldOne: { 
      require_from_group: [1, '.datagroup'], 
      maxlength: { 
       param: 2, 
       depends: function(element) { 
        var valTwo = $('#fieldTwo').val(); 
        return !valTwo || (valTwo.length < 8); 
       } 
      } 
     }, 
     fieldTwo: { 
      require_from_group: [1, '.datagroup'], 
      minlength: { 
       param: 8, 
       depends: function(element) { 
        var valOne = $('#fieldOne').val(); 
        return !valOne || (valOne.length > 2); 
       }     
      } 
     } 
    }, 
    submitHandler: function (form) { 
     alert("process"); 
     return false; 
    }, 
    invalidHandler: function (event, validator) { 
     if ($('#fieldOne').val() || $('#fieldTwo').val()) { 
      alert('processfailed'); 
     } else { 
      alert('empty'); 
     } 
     return false; 
    } 
}); 

jsfiddle

Я удалил groups свойство, поскольку он вызывает все сообщения, чтобы отображаться рядом с первым полем, которое не кажется правильным, когда сообщение, потому что второе поле нарушает правила minlength.

Примечание. Первым параметром функции invalidHandler является объект события, а не элемент формы, но вы можете получить элемент формы с помощью event.target.

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