Submitted by Philalawst on
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