2016-08-22 2 views
0

Я нашел другую ссылку jQuery validate + AJAX e-mail availiability checkJquery Проверка Ajax оленья кожа перепроверить

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

Пользователь Dr Blowhard говорит, что это потому, что они переписывают обратный вызов удаленных удаленных методов. Но он не приводит пример о том, как с этим справиться. Вместо этого у него есть SubmitHandler, связанный с параметрами проверки. Итак, как мне сделать пару вещей, а затем вернуть true или false? Например, если я нахожу адрес электронной почты, я возвращаю некоторые данные, которые у меня уже есть, и отключить эти поля формы.

$("#userForm").validate({ 
onfocusout: function (element) { 
    this.element(element); 
}, 
onkeyup: false, 
rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: { 
      url: 'ajax/checkEmail.php', 
      type: 'post', 
      data: { 
       email: function() { 
        return $('#email').val(); 
       } 
      }, 
      success: function(data) { 
       if(data.status == 1) { 
        $('#affcode').val(data.affCode).attr("disabled", true); 
        $('#userID').val(data.userID); 
        $('#password, #password2').attr("disabled", true); 
        return true; 
       } else { 
        $('#password, #password2, #affcode').removeAttr("disabled"); 
        return true; 
       } 
      } 
     } 
    }, 
messages: { 
    affcode: { 
     required: "Please enter a custom affiliate code.", 
     regx: "Affiliate codes must start with a LETTER." 
    } 
} 
}); 

Мой PHP выглядит так:

$res = PDOWrapper::instance()->select('accounts', array("email" => $_REQUEST['email'])); 

if(count($res) > 0) { 
    $return['status'] = 1; 
    $return['affCode'] = $res[0]['affCode']; 
    $return['userID'] = $res[0]['aKey']; 
} else { 
    $return['status'] = 0; 
} 


echo json_encode($return); 

ответ

0

Самый лучший способ для создания пользовательского правила. ОЧЕНЬ важно добавить ответ var; перед addMethod. Вам нужно только объявить об этом один раз.

var response; 
$.validator.addMethod(
    "checkAffiliate", 
    function(value, element) {   
     $.ajax({ 
      type: "POST", 
      url: "ajax/checkAffiliate.php", 
      data: { 
        email: function() { 
         return $('#email').val(); 
        }, 
         affcode: function() { 
         return $('#affcode').val(); 
        }, 
      }, 
      dataType: 'json', 
      success: function(data) 
      { 
       if(data.status == 0) { 
        response = false; 
       } else { 
        //Do some stuff here 
        response = true; 
       }   
      }, 
      async: false 
     }); 
     return response; 
    }, 
    "Affiliate Code is already in use." 
);