欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

首页博客yoyo198624的博客 关于AHAH再次加载AHAH的方法

shiping1 的头像
关于如何加载AHAH,不做累赘叙述,详情参考

http://drupal.org/node/331941#comment-1503260

关于调用了AHAH之后,新出来的button会丢失绑定JS效果,可以参考诗人的回答

drupal6 表单如何在某个元素使用ahah,并在这个表单元素中使用了自己编写的js特效?

=============================================================

最近做项目的时候,碰到这样的问题,我需要一个fieldset,里面有个ahah的add more filedset按钮,点击之后会在当前的fieldset之后再创建一个包含了ahah的add more filedset按钮的新fieldset。而这个时候,新的add more会丢失ahah功能。(其实这个功能很像

解决方法:

在 ahah的回调方法里,加入了我的新fieldset之后

1. 调用一下form_builder

2. 复制以下方法到你的代码去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function ahah_render($element){
    $ahah_binding = array(
      'url'      => url($element['#ahah']['path']),
      'event'    => $element['#ahah']['event'],
      'keypress' => empty($element['#ahah']['keypress']) ? NULL : $element['#ahah']['keypress'],
      'wrapper'  => empty($element['#ahah']['wrapper']) ? NULL : $element['#ahah']['wrapper'],
      'selector' => empty($element['#ahah']['selector']) ? '#'. $element['#id'] : $element['#ahah']['selector'],
      'effect'   => empty($element['#ahah']['effect']) ? 'none' : $element['#ahah']['effect'],
      'method'   => empty($element['#ahah']['method']) ? 'replace' : $element['#ahah']['method'],
      'progress' => empty($element['#ahah']['progress']) ? array('type' => 'throbber') : $element['#ahah']['progress'],
      'button'   => isset($element['#executes_submit_callback']) ? array($element['#name'] => $element['#value']) : FALSE,
    );
    return array($element['#id'] => $ahah_binding);
}

3. $ahah_settings = ahah_render(我的fieldset的array)

4.在$output = theme ( 'status_messages' ) . drupal_render ( $subform );之后,添加

1
$output .= '<script type="text/javascript">jQuery.extend(Drupal.settings.ahah, '. drupal_to_js($ahah_settings) .');</script>';

原因 :ahah的绑定,需要提供Drupal.settings.ahah, 而这个settings在页面生成时就已经加载完毕,  所以ahah的callback里,我们需要在render了这个element之后加入内嵌的js去给上settings,同时,因为ahah需要提供element的id,所以要在加入新元素后,重新build一下我们的内容

来自  http://www.drupalla.com/node/1391

普通分类: