2010-07-26 10 views
3

J'essaie de soumettre un formulaire et d'utiliser hook_form_submit.hook_form_submit n'est pas appelé

Le problème est que le formulaire est affiché via ajax et que hook_form_submit n'est pas appelé.

$items['ajaxgetform/%'] = array( 
    'page callback' => 'ajaxgetform', 
    'access arguments' => array('access content'), 
    'type' => MENU_CALLBACK 
); 

function ajaxgetform($form_id) {  
    drupal_get_form($form_id); 
    return drupal_json($panel); 
} 

function_myform_form($form_state) { 
    $form['myform'] = array( 
    '#title' => 'myform value', 
    '#type' => 'textfield', 
    '#default_value' => 'myform default value' 
); 

    $form['#action'] = url('myurl'); 

    $form['submit'] = array( 
    '#type' => 'submit', 
    '#value' => 'submit' 
); 

    $form['#ajaxsubmit'] = TRUE; 
    return $form; 
    } 

hook_form_alter() est appelée.

Ci-dessous n'est pas appelé? Je ne suis pas sûr si c'est un problème commun, mais j'ai été bloqué pendant des heures en essayant de le faire fonctionner. Si je supprime $form['#action'] = url('myurl');myform_form_submit() est appelée. Cependant, je reçois un écran blanc avec un script jason.

+0

Normalement, il n'y a aucune raison de définir '$ form ['# action']'; Je ne l'ai jamais changé dans toutes les formes que j'ai créées. – kiamlaluno

Répondre

8

Il n'y a pas de hook_form_submit(). Au lieu de cela, vous enregistrez les gestionnaires de soumission avec $form['#submit']. Donc, si vous voulez appeler myform_form_submit() lorsque le formulaire est soumis, ajouter:

$form['#submit'][] = 'myform_form_submit'; 

à myform_form(). Jetez un oeil à la 5.x to 6.x form changes et la Forms API reference pour plus d'informations.

+0

Merci, je vais donner un il ya –

0

Votre formulaire est-il affiché sur la page au myurl? Pour qu'une soumission de formulaire soit traitée, le formulaire doit être affiché (en utilisant drupal_get_form()) sur la page utilisée comme action.

Vous pouvez également essayer d'afficher le formulaire #redirect à l'URL de la page de destination au lieu de son action #. De cette façon, le formulaire est soumis à son URL de génération mais l'utilisateur est redirigé vers votre page de destination après le traitement.

+0

Oui mon formulaire est affiché à myurl. Si ce qui précède ne fonctionne pas, je vais chercher à #redirect. Merci. –

+0

En affichant, je voulais dire sorti par le gestionnaire pour le chemin myurl. Si le balisage de formulaire est récupéré à partir d'un autre chemin, puis en utilisant AJAX, puis ajouté à la page, cela ne fonctionnera pas puisque lors du traitement de la soumission du formulaire, drupal_get_form() ne sera pas appelé. –