2015-02-26 3 views
1

Мое приложение использует петрушку для проверки. На стороне клиента нет проблем. У меня возникает проблема с тем, что петрушка аннулирует поле на основе ответа AJAX. Я пытаюсь проверить SSN. Технически все 9 являются допустимым форматом для SSN, но как только он попадает на сервер, наши системы считают его недействительным. Я знаю, что могу написать правило Parsley, которое проверяет это, но любое поле в нашей форме может быть признано недействительным на основе правил на сервере (у меня нет доступа к ним). Я ищу способ сделать что-то вроде этого:Возможно ли повысить риск петрушки по запросу?

$('form').submit(function(e) { 
    e.preventDefault(); 
    if ($(this).parsley().isValid()) { 
     $.post("/foo/bar/post", 
       $(this).serializeArray(), 
       function(response) { 
        if (response.valid) { 
          alert('success!') 
         } else { 
          // this is where I'm lost 
          forceParsleyInvalidation(response.item, response.message) 
         } 
       }, 
       'json'); 
      }} 

Отклик возвращается со всеми в информации, мне нужно, я просто не знаю, как сделать Петрушка делать свое дело на основе того, что было возвращен как недействительный с сервера. Я пытаюсь избежать необходимости писать конкретные правила для каждого элемента, который может стать недействительным.

+0

Из чего я понимаю, вы пытаетесь удалить ошибку петрушки, это правильно? –

+0

Больше похоже на добавление одного или запуск существующей ошибки. В этом конкретном случае, если пользователь ввел частичный SSN, появится сообщение «Введите действительный SSN». Мне нужно, чтобы такое же сообщение появилось на основе ответа AJAX. – HapiDjus

ответ

3

Parley позволяет вам добавлять, обновлять и удалять ошибки с помощью Javascript (check the documentation).

Следующий код работает, но вам может потребоваться настроить его на основе того, что вы получаете с сервера. Для демонстрационных целей я устанавливаю значения response вручную, и у меня нет $.post.

if ($(this).parsley().isValid()) { 
    var response = []; 
    response.item = 'ssn'; 
    response.message = 'Well, you need to correct this field'; 

    var FieldInstance = $('[name=' + response.item + ']').parsley(), 
     errorName = response.item + '-custom'; 

    /** 
    * You'll probably need to remove the error first, so the error 
    * doesn't show multiple times 
    */ 
    window.ParsleyUI.removeError(FieldInstance, errorName); 

    // now display the error 
    window.ParsleyUI.addError(FieldInstance, errorName, response.message); 
} 

Посмотрите at this jsfiddle, чтобы увидеть, как это работает.

+0

Это отлично работает. Я был на правильном пути. Просто отсутствует экземпляр поля. Цените помощь. – HapiDjus

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