捕获Drupal自动完成值/事件并在找到的结果上更改表单组件

时间:2011-05-30 07:52:37

标签: javascript json drupal javascript-events autocomplete

我不是AJAX,drupal或javascript的专家,但我会尽力让我的问题尽可能清楚。

我在开发环境中在MySQL上运行drupal 7。我编写了自己的模块'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>

“&lt; a href ='?q = addsite&amp; companyid = xx'&gt; add site&lt; / a&gt;” link还需要在其超链接引用中包含公司ID,因此我还需要从结果中捕获这个。也许是隐藏的形式组件。

非常感谢任何帮助。

作为旁注,我试图尽可能地遵循'drupal方式':)

1 个答案:

答案 0 :(得分:6)

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