Formulaire chargé en ajax et envoyé en ajax

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai un gros problème avec un formulaire qui chargé en ajax et qui est envoyé en ajax.

Si je ne charge pas ce formulaire en ajax mais l'inclus dans une page, l'envoi en ajax fonctionne.
Dès que je charge ce formulaire en ajax, c'est foutu, l'envoi en ajax ne fonctionne plus.

Voici le code javascript qui charge le formulaire :

(function($){
   
    Drupal.ajax.prototype.commands.afterAjaxCallbackExample = function(ajax, response, status) {
        Drupal.attachBehaviors();
    };
   
    Drupal.behaviors.customajaxform= {
       
        attach:function(context,settings){
           
        jQuery('#clickme').once('custom-ajax-processed').each(function () {
            var $mySpecialLink = $('#clickme', context);
            new Drupal.ajax('#clickme', $mySpecialLink, {
                url: "/customajaxform/ajax/ajax/displayform",
                settings: {},
                event: 'click tap'
            });
        });

        }
       
    };
       
})(jQuery)

Le code appelé par /customajaxform/ajax/ajax/displayform

function customajaxform_ajax_callback($type = 'ajax', $some_argument) {
    if ($type == 'ajax')
    {
        switch($some_argument )
        {
           
            case 'displayform':
                $html = 'Hey ! Some AJAX content !';
                $form = drupal_get_form('customajaxform_panier');
                $settings = FALSE;
                $settings = '';
                $javascript = drupal_add_js(NULL, NULL);
                if(isset($javascript['settings'], $javascript['settings']['data']))
                {
                    $settings = '<script type="text/javascript">jQuery.extend(Drupal.settings, ';
                    $settings .= drupal_json_encode(call_user_func_array('array_merge_recursive', $javascript['settings']['data']));
                    $settings .=  ');';
                    $settings .=  '</script>';
                }
               
                $html = '<div id="customajaxform-wrapper">'.drupal_render($form).$settings.'</div>';
                $commands[] = array (
                    'command' => 'afterAjaxCallbackExample',
                    'selectedValue' => 'blablabla',
                );
                $commands[] = ajax_command_html('#customajaxform-wrapper', $html);
                //$commands[] = ajax_command_replace('#customajaxform-wrapper', $html);
            break;
        }
        $page = array('#type' => 'ajax', '#commands' => $commands);
        ajax_deliver($page);
    }
    else {
        $output = t("This is some content delivered via a page load.");
        return $output;
    }
}

Et voici le code qui envoi le formulaire :

function customajaxform_panier($form, &$form_state)
{

    $form['#tree'] = TRUE;

    ...

    $form['submit'] = array(
        '#weight' => 11,
        '#type' => 'submit',
        '#value' => 'Valider ma sélection',
        '#ajax' => array(
                'callback' => 'panier_submit_ajax_submit',
                'wrapper' => 'customajaxform-wrapper',
                'method' => 'html',
                'path' => 'system/ajax',
            ),
    );
    return $form;
}

Est-ce qu'il y a quelque chose à faire pour rappeler à Drupal de prendre compte le $form['submit']['#ajax']['callback'] ?

merci,
Phil

Forum : 
Version de Drupal :