#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