Как использовать jQuery для удаленной проверки поля, которое зависит от другого поля в форме? - PullRequest
23 голосов
/ 26 апреля 2010

У меня есть форма, в которой я использую удаленную проверку, чтобы проверить, существует ли адрес электронной почты в базе данных. Однако выгода заключается в том, что в этой форме пользователь может выбирать между несколькими различными «группами», и каждая группа имеет свой собственный набор адресов электронной почты (таким образом, одна и та же почта может существовать один раз в каждой группе).

Выбор группы - это раскрывающийся список в форме, а адрес электронной почты - это поле ввода с удаленной проверкой. У меня есть пара вопросов. Во-первых, я настроил свое дистанционное правило так:

remote: {
    url: 'remote_script.php',
    data: {  group_id:  $('select.group_id').val() }
}

Однако, похоже, статически устанавливается параметр group_id равным первому значению в выборе. Это означает, что если я изменю выбор, а затем снова инициирую удаленную проверку, параметр group_id не изменится

Во-первых, как я могу сделать этот параметр динамическим, в зависимости от значения выбора в форме?

Во-вторых, как вручную запустить удаленную проверку в поле адреса электронной почты? При изменении выбора group_id я хочу повторно запустить удаленную проверку в поле адреса электронной почты (без изменения значения поля). Я пытался использовать

$(selector).validate().element('.email_addr')

Но, похоже, это вызывает только стандартную проверку (требуется, электронная почта), а не удаленный вызов.

Ответы [ 2 ]

37 голосов
/ 28 апреля 2010

Нашел решение второй части моего вопроса:

 $(".email_addr").removeData("previousValue");

удалит кэш удаленного запроса и разрешит повторный запуск удаленного запроса, используя .element ().

Таким образом, мой код выглядит следующим образом:

$("select.group_id").change(function() {
    $(".email_addr").removeData("previousValue"); //clear cache when changing group
    $("#customer_form").data('validator').element('.email_addr'); //retrigger remote call
    //my validator is stored in .data() on the form
});

Решение найдено здесь: Решение

На первую часть моего вопроса первоначально ответил @Jeffery To

Все, что нужно сделать, это изменить значение параметра на функцию, а не просто на значение. Пример Джеффри скопирован ниже для будущих гуглов:

remote: {
  url: 'remote_script.php',
  data: {
    group_id: function () {
        return $('select.group_id').val();
    }
  }
}
8 голосов
/ 26 апреля 2010

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

remote: {
    url: 'remote_script.php',
    data: {
        group_id: function () {
            return $('select.group_id').val();
        }
    }
}

должно работать.

Что касается вашего второго вопроса, вы пытались передать правила проверки на validate()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...