在我的自定义表单中(在自定义模块中)drupal_add_js()仅在没有错误消息时添加JS。
My code goes like this:
function ntcf_redo_order_form( &$form_state = array() ) {
global $base_path, $user;
$my_dir = drupal_get_path('module', 'ntcf_redo');
drupal_add_js("$my_dir/order.js", 'module', 'header', FALSE, TRUE, FALSE);
$form = array();
...
return $form;
}
如果验证函数使用_form_set_error()_来显示错误消息并突出显示有问题的字段,则会显示消息并突出显示该字段,但_drupal_add_js()_调用不执行任何操作。没有待显示的待处理错误消息,一切都很好。
编辑:此问题与drupal_set_message()
一起发生不,仅与form_set_error()
一起发生。
我尝试将3个后面的参数添加到* drupal_add_js()*调用中,告诉它不要优化它(不要将它与其他JS文件组合)。在HTML中没有提到文件order.js,我是否使用最后4个参数('header',FALSE,TRUE,FALSE)没有区别。
在管理员/性能方面,我关闭了优化Javascript文件,以及几乎所有缓存,这也没有任何区别。
额外详情: 我不确定这是否有所作为,但这不会让我感到惊讶,所以这里有: 我在这里做的是一个多部分的“向导”表单,允许用户继续前进并返回。此外,许多页面使用AJAX,因此我需要在_submit函数中进行所有“必需”字段验证,而不是让Drupal自动执行(因为这会使AJAX变得混乱)。因此,如果缺少“必需”字段,_submit()函数会设置错误消息,表单生成函数会再次生成相同的表单(由错误消息产生的附加装饰)。
此外:这是偏离主题的,但它可能有助于使用Google的用户:在执行允许后退的多页表单时,您必须为表单上的每个项目分配权重,或者当你倒退时,田地往往会“徘徊”。
有什么想法吗?
答案 0 :(得分:1)
我有同样的问题,这是我发现的一种解决方法(对于Drupal 7,可能在6中工作):
1. in your form setup (or hook_form_alter), do this :
$form['#post_render'][]='yourfunction';
2. define :
function yourfunction($content,$element){
$my_dir = drupal_get_path('module', 'ntcf_redo');
drupal_add_js("$my_dir/order.js", 'module', 'header', FALSE, TRUE, FALSE);
return $content;
}
我认为这是有效的(虽然你的方法没有),因为hook_form_alter(和/或hook_form) 不要为准备/缓存的表单再次调用,因此初始表单加载将加载javascript,但后续帖子不会。 HTH
答案 1 :(得分:1)
麦克的答案($ form [&#39;#post_render&#39;] [] =&#39; yourfunction&#39 ;;),虽然不是最佳方式,但仍会有问题,会导致drupal_add_js出现问题。< / p>
执行此操作的最佳方法是通过表单api&#39; #adlated&#39;添加您的javascript。
而不是在&#39;#post_render&#39;上使用drupal_add_js或新的回调:
$form['#attached']['js'] = array(
drupal_get_path('module', 'module_name') .'/file/path/filename.js',
);
你可以通过一个&#39; css&#39;数组也是如此。作为一个数组,您可以根据需要传入文件。
*这适用于Drupal 7.其他版本可能不同。