[development] Question on AHAH

Randy Fay randy at randyfay.com
Sat Apr 3 01:21:06 UTC 2010


If I'm not mistaken, the problem is that the AHAH bindings are done at page
load time, and of course you're replacing the element that's bound with
another element without a page reload, but the javascript does not know that
you've changed things underneath it.

I don't know a way to introduce a new element and have it bound as an AHAH
element. However, you could have both on the original page, with one hidden,
and that would probably work.

In D7, you could probably find some ways to work around this, although it
would still require some magic.

-Randy

On Fri, Apr 2, 2010 at 3:29 PM, nitin gupta <nitingupta.iitg at gmail.com>wrote:

> Hi,
>
> I have been scratching my head for long, looks like cant figure it out. If
> I add elements to the form on an AHAH refresh, let us say a submit button
> with AHAH properties, this button will not be submitted using AHAH. Anyone
> know about this? any pointers to resources? any work around?
>
>
> function test_form($form_state) {
>   $form['open'] = array('#value' => '<div id="test_replace">');
>   dpm($form_state);
>   if($form_state['test'] == 1) {
>   $form['test']['share'] = array(
>     '#type' => 'submit',
>         '#value' => 'share',
>     '#submit' => array('test_form_js_submit'),
>     '#ahah' => array(
>       'path' => 'test/js',
>       'wrapper' => 'test_replace'
>     ));
>   }
>   else {
>       $form['test']['share2'] = array(
>     '#type' => 'submit',
>     '#value' => 'share2',
>     '#submit' => array('test_form_js_submit'),
>     '#ahah' => array(
>       'path' => 'test/js',
>       'wrapper' => 'test_replace'
>     ));
>   }
>
>   $form['close'] = array('#value' => '</div>');
>
>   return $form;
> }
>
> function test_form_js_submit(&$form, &$form_state) {
>
>   $form_state['test'] = 1 ;
>   $form_state['rebuild'] = TRUE;
> }
>
> function test_form_js() {
>   $form_state = array('submitted' => FALSE);
>   $form_build_id = $_POST['form_build_id'];
>   $form = form_get_cache($form_build_id, $form_state);
>   $form_state['post'] = $form['#post'] = $_POST;
>   $form['#programmed'] = $form['#redirect'] = FALSE;
>   $args = $form['#parameters'];
>   $form_id = array_shift($args);
>   drupal_process_form($form_id, $form, $form_state);
>   $form = drupal_rebuild_form($form_id, $form_state, $args,
> $form_build_id);
>
>   //Get HTML for the replacement form. Only these elements will be
> AHAH-refreshed.
>   test_add_children($new_form['test'], $form['test']);
>   $output = theme('status_messages') . drupal_render($new_form);
>   drupal_json(array('status' => TRUE, 'data' => $output));
> }
>
> function test_add_children(&$new_form, $form) {
>   foreach (element_children($form) as $child) {
>     $new_form[$child] = $form[$child];
>     test_add_children($new_form[$child], $form[$child]);
>   }
> }
>
> function test_menu() {
> $items = array();
>
> $items['test'] = array(
>     $items['test/js'] = array(
>     'page callback' => 'test_form_js',
>     'type' => MENU_CALLBACK,
>   );
>
>   return $items;
>
> }
>
>
> In the above code, when 'share2' is clicked it submits perfectly using
> ahah, and converts to 'share' but this button does not have ahah properties.
>
> --
> Regards,
> Nitin Kumar Gupta
> http://publicmind.in/blog/
>



-- 
Randy Fay
Drupal Development, troubleshooting, and debugging
randy at randyfay.com
+1  970.462.7450
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20100402/aa04f7ed/attachment.html 


More information about the development mailing list