Как использовать 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')
Но это, похоже, вызывает только стандартную проверку (требуется, электронная почта), а не удаленный вызов.
Ответы
Ответ 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()
?