drupal_add_js()只在没有错误消息时添加JS(D6)

时间:2011-08-15 18:57:06

标签: drupal-6

在我的自定义表单中(在自定义模块中)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的用户:在执行允许后退的多页表单时,您必须为表单上的每个项目分配权重,或者当你倒退时,田地往往会“徘徊”。

有什么想法吗?

2 个答案:

答案 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.其他版本可能不同。