1

我有一些代码使用常规的 Forms API 来组合一个简单的表单。我正在使用 jQuery Tools 包来生成此表单并将其插入到覆盖中。这工作正常,但我想将输入焦点设置为表单中的文本字段,一旦它暴露。<script type='text/javascript'>$('#textfieldID').focus();</script>我已经尝试在表单的主题功能中添加一些应该执行此操作的 jQuery 代码 - 或类似的东西到表单的末尾,但它没有被加载到页面上。我猜这是因为 Drupal 的某些部分“有帮助”并过滤掉了脚本,但我不确定。在任何情况下,代码都不会运行——如果我插入一个 javascript alert() 语句作为代码的一部分,什么也不会发生。

有什么建议吗?我真的很想把注意力集中在这个人身上。谢谢!

4

3 回答 3

1

您应该使用 Drupal 的 api 来包含 JavaScript,使用drupal_add_js. 在表单的主题功能中执行此操作是可行的方法,因为它会被调用,即使表单被缓存。

Drupal 不会过滤掉脚本标签等,所以如果它们没有被打印出来,听起来你在主题功能中做错了。

于 2011-02-25T16:30:13.610 回答
0

我宣布这是“已回答”——在深入挖掘(= 键盘上的血)之后,我现在很清楚 jQuery 工具是这里的罪魁祸首——由 Drupal 创建的表单肯定包含任何脚本内容我插入其中(最新方案:$(document).ready(...focus...) 作为表单中的标记元素)。在通过 jQT 覆盖过程的某个地方,脚本消失了。主要提示:如果我禁用覆盖以使表单出现在常规页面中,则脚本存在、运行并正确设置焦点。

模糊;至少我(想我)知道发生了什么——即使它不起作用,我还有一个更好的问题要问。感谢大家一路上的帮助。

于 2011-02-26T17:40:00.363 回答
0

您应该能够在表单主题函数中执行 drupal_add_js,但我需要查看您的代码。

这对我有用:

mymodule_init() {
   if (request_uri() == 'path where your form resides') {
      drupal_add_js(arguments);
   }
}

如果你有一个多步骤表单,你可以这样做:

mymodule_init() {
   if (preg_match('/path/', request_uri())) {
      drupal_add_js(arguments);
   }
}

您可能想使用 drupal_match_path 而不是上面的 preg_match ,但我未能成功使其适用于这种情况。

http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_js/6

于 2011-02-25T16:27:50.087 回答