Подтвердить что ты не робот

Как использовать jQuery для дистанционной проверки поля, которое зависит от другого поля в форме?

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

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

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

Тем не менее, это, по-видимому, статически задает параметр group_id независимо от первого значения в элементе select. Смысл, если я изменю выбор, затем снова запустите повторную проверку, параметр group_id не изменится

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

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

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

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

4b9b3361

Ответ 1

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

 $(".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

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

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

Ответ 2

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

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

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

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