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

Я не эксперт по AJAX, drupal или javascript, но я сделаю все возможное, чтобы сделать мой вопрос как можно более ясным.

Я запускаю drupal 7 на MySQL в среде разработчиков. Я написал свой собственный модуль 'acid' для обработки пользовательских функций автозаполнения

Я создаю сайт для компании, чтобы позволить им добавлять формы удовлетворенности клиентов для всех своих сайтов. В моей базе данных есть таблица 'acid_company' и 'acid_sites', структура которой состоит в том, что одна компания может иметь несколько сайтов.

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

Таким образом, шаги будут:

  • [пользователь нажимает «добавить сайт»] -> [представить форму «добавить компанию»] -> [обрабатывать ввод пользователя в поле автозаполнения company_name] ->
  • компания уже существует -> [изменить кнопку отправки формы на «добавить сайт» (или представить ссылку на «добавить форму сайта»)]
  • компания не существует -> оставить кнопку «отправить» без изменений -> пользователь нажимает кнопку «отправить» [добавить компанию и отправить пользователя в форму «добавить сайт»] (у меня это уже работает!)

Итак, я хотел бы знать, как мне получить событие из элемента company_name, когда пользователь выбрал название компании из найденных результатов и соответственно изменить другие компоненты формы.

что-то вроде:

(user inputs company name) -> results found -> (user clicks one of the found results)<br />
<code>
do_disableForm()<br />
{<br />
&nbsp;&nbsp;this.form.addcompany.company_name.disable();<br />
&nbsp;&nbsp;this.form.addcompany.submit.disable();<br />
&nbsp;&nbsp;this.a.addsite.setVisable(TRUE);
}<br />
</code>

Ссылка " add site " также должна содержать идентификатор компании в ссылке на гиперссылку, поэтому мне также необходимо получить это из результатов. Может быть, в скрытом компоненте формы.

Любая помощь будет принята с благодарностью.

Как свидетельство, я старался следовать «друпальному пути» как можно больше:)

1 Ответ

6 голосов
/ 31 мая 2011

В misc/autocomplete.js объявлен объект JavaScript Drupal.jsAc , используемый для автозаполнения. Это, вероятно, то, что вы ищете:

/**
 * Puts the currently highlighted suggestion into the autocomplete field.
 */
Drupal.jsAC.prototype.select = function (node) {
  this.input.value = $(node).data('autocompleteValue');
};

Как правило, в JavaScript можно переопределить практически все, включая прототипы.

Так что вам просто нужно скопировать его в свой собственный файл .js и добавить свой код do_disableForm

...