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

#javascript #json #drupal #autocomplete #dom-events

#javascript #json #drupal #автозаполнение #dom-события

Вопрос:

Я не эксперт по 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 />
amp;nbsp;amp;nbsp;this.form.addcompany.company_name.disable();<br />
amp;nbsp;amp;nbsp;this.form.addcompany.submit.disable();<br />
amp;nbsp;amp;nbsp;this.a.addsite.setVisable(TRUE);
}<br />
</code>
  

Ссылка «<a href=’?q=addsite amp; companyid=xx’> добавить сайт</ a>» также должна содержать идентификатор компании в своей гиперссылке, поэтому мне также нужно было бы зафиксировать это из результатов. Возможно, в скрытом компоненте формы.

Любая помощь была бы высоко оценена.

В качестве примечания я постарался максимально следовать «пути drupal» 🙂

Ответ №1:

В 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