С плагином проверки JQuery я хочу изменить метод удаленной проверки - PullRequest
3 голосов
/ 16 сентября 2009

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

Мне нужно проверить, что адрес электронной почты еще не в нашей базе данных. Первоначально сценарий в сочетании с кодом на стороне сервера просто проверял адрес электронной почты в нашей базе данных и возвращал значение true или false, это сработало успешно.

Теперь мне нужно добавить дополнительную функцию, поскольку теперь мы можем иметь один и тот же адрес электронной почты в базе данных в два раза дольше, чем siteid для записи, т.е. если запись для fred@bloggs.com с siteid = site1 существует в базе данных, вы не можете добавить fred@bloggs.com с siteid = site1 снова, но вы можете добавить fred@bloggs.com с siteid = site2.

Я подтвердил, что серверный код работает, и для данного адреса электронной почты и идентификатора сайта он возвращает значение true или false, как и ожидалось.

Я хочу повторно проверять поле электронной почты всякий раз, когда изменяется поле выбора siteid. В данный момент он, кажется, запоминает предыдущую проверку (она уже проверена при загрузке) и не зависит от изменения идентификатора сайта, если только я не изменю адрес электронной почты с fred@bloggs.com на что-то другое, затем вернусь обратно, затем он будет подтвержден для нового siteid. Я пробовал комбинацию правил удаления и добавления правил, похоже, ничего не работает.

Помощь!

<html>
<head>
<script type="text/javascript">
$(document).ready(function () {
    var enquiryform = {
        rules: {
       email: {
           required: true,
      email: true,
      remote: 'emailcheck2.asp?siteid=' + $('#siteid').val()
       }        
   },
   messages: {
            email: {
           remote: 'exists already!'
       }
        }           
    };

    var validatedform = $(".validatedform").validate(enquiryform).form();       
    $("#siteid").bind("change", function(e){
        enquiryform.rules.email.remote='emailcheck2.asp?siteid=' + $('#siteid').val();
    });
});
</script>
</head>
<body class="contactadd">
</head>
<body>
<form method="Post" class="validatedform">
<input class="email" id="email" name="email" type="text">
<select id="siteid" name="siteid">
<option value="1">Site 1</option>
<option value="2">Site 2</option>
</select>
<input id="submitbutton" type="submit" value="Create">
</form>
</body>
</html>

Ответы [ 3 ]

10 голосов
/ 30 ноября 2009

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

$("#site").change(function() {
  $("#email").removeData("previousValue");
});
1 голос
/ 27 августа 2012

Привет, если вы используете этот плагин проверки jquery, http://docs.jquery.com/Plugins/Validation/validate

Если вы хотите отправить дополнительные параметры (например, siteid) для удаленной проверки, вы можете сделать что-то вроде этого:

var enquiryform = {
        rules: {
            email: {
                required: true,
                email: true,
                remote: {
                    url: "emailcheck2.asp", //this should be the full path url including base url
                    data: {
                        siteid: function() {
                            return $('#siteid').val();
                        }
                    }
                }
            }
        }
    };
1 голос
/ 16 сентября 2009

Из того, что я могу сказать, это может быть ограничением плагина validate. Есть несколько опций для запуска проверки (что именно вы хотите сделать), заданной в http://docs.jquery.com/Plugins/Validation/validate#toptions, но я не вижу способа инициировать проверку на одном элементе при изменении другого элемента.

Лучше всего разместить код проверки примерно так:

$('select#siteid').onChange(function(){
        $('form.validatedform').validate({ 
                 rules:{
                       email: {
                              required: true,
                              email: true,
                              remote: 'emailcheck2.asp?siteid=' + $('#siteid').val()
                       }
                  }
         });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...