Drupal не позволит JQuery добавить в список выбора в пользовательской форме - PullRequest
2 голосов
/ 26 мая 2011

У меня есть форма с выпадающим элементом «select», который иногда нужно будет добавлять пользователю.Итак, я добавил ссылку, чтобы открыть форму «Модальный фрейм», создал форму «Модальный фрейм» и сделал так, чтобы ее функция _submit () добавляла новые данные в таблицу, содержащую параметры для элемента select.Затем он «возвращает» новый идентификатор и имя для обратного вызова Javascript (как это делают модальные фреймы), а обратный вызов JS добавляет новый элемент в раскрывающийся список и делает его текущим выбранным элементом в браузере с помощью JQuery.Все это прекрасно работает.

Наконец, пользователь отправляет исходную форму и получает сообщение об ошибке «Обнаружен неправильный выбор. Пожалуйста, свяжитесь с администратором сайта.»

Функция создания формы создаетсписок опций из базы данных, который (я проверял) включает в себя новую опцию, поэтому я предполагаю, что Drupal использует кэшированную версию формы, а не перестраивает ее перед автоматической проверкой.Если вы вернетесь на одну страницу назад, затем вперед, в списке появится вновь добавленный выбор.

Я попытался добавить:

global $GLOBALS;
$GLOBALS['conf']['cache'] = FALSE;

к функции, которая создает страницу с проблемой, но это не имело значения.

К вашему сведению: это часть многостраничной формы, если это имеет значение.

Я также думал о попытке добавить опцию в кэшированную версию«родительская» форма в функции «дочерняя» форма _submit (), но не знаю, как получить form_build_id «родительской» формы.Кроме того, это кажется слишком большой суматохой (хотя я могу ошибаться в этом).

Идеи?

Ответы [ 2 ]

0 голосов
/ 26 октября 2012

Я думаю, вам лучше использовать AHAH-функции Drupal для запроса обновленного элемента select из функции обратного вызова.Таким образом, кэшированная форма перестраивается на стороне сервера, и вам не нужно добавлять страшный DANGEROUS_SKIP_CHECKВот учебник для Drupal 6:

http://randyfay.com/ahah

0 голосов
/ 22 июня 2011

Вы отправляете форму, отличную от времени отображения формы, поэтому Drupal считает ее злонамеренным вводом.Если вы хотите пропустить эту злонамеренную проверку, добавьте строку ниже как свойство вашей формы в функцию your_module_form ().

'# DANGEROUS_SKIP_CHECK' => TRUE,

Это решит вашу проблему, ноуверен, что вы добавляете ручную проверку для защиты от вредоносных входов :).Надеюсь, это поможет вам.

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