drupal_add_js e form create in un modulo

5 contenuti / 0 new
Ultimo contenuto
drupal_add_js e form create in un modulo

Volevo provare a validare una form attraverso javascript. Ma ho trovato due problemi. Il primo è che non riesco a leggere il valore dei campi della form con javascript (cioè quello che ho provato a fare non funziona) e il secondo problema è che mi chiama in ogni caso l' hook validate che io vorrei chiamasse solo se passa il test javascript.
Se qualcuno sa darmi qualche consiglio mi renderebbe felice.

<?php
 
function controlloform_crea()
//creo la form e provo ad inserire il codice javascript
  
drupal_add_js( 'function prova(){a=document.getElementById("eta").value; alert(a) ;
      }'
, 'inline' );
 
// creazione del campo di testo
  
$form['eta'] = array
   (
  
'#type' => 'textfield',
  
'#title' => t('eta'),
  
'#size' => 50,
  
'#maxlengh' => 255,
  
'#description' => t('scrivi l\' eta'),
  
'#attributes' => array(  'id' => "eta"), //vorrei dare a questo campo id=eta
  
);
  
//creazione del bottone
  
$form['invia'] = array(
  
'#type' => 'button',
  
'#value' => t('invia'),
  
'#attributes' => array(  'onClick' => "prova();"),
   );
return
$form;
}
function
controlloform_prima(){
  
$sb = drupal_get_form('controlloform_crea');
   return
$sb;
}
//CREO IL MENU
function  controlloform_menu()
 {
  
$items = array();
 
$items['controlloform'] = array(
   
'title' => 'Esempio di form con controllo',
   
'page callback' => 'controlloform_prima',
   
'access arguments' => array('permessi controlloform'),
   
'type' => MENU_CALLBACK
 
);
 
////////////////////AGGIUNTO///////
   
$items['controlloform_risposta'] = array(
   
'title' => 'prova risposta',
   
'page callback' => '',
   
'access arguments' => array('permessi controlloform'),
   
'type' => MENU_CALLBACK
 
);
 
//////////////////////////////////////
 
return $items  ;
 }
//hook validate
function controlloform_crea_validate($form,&$form_state)
 {
   
$form_values = $form_state['values'];
   
$contenutocampo=$form_values['eta'];
   
drupal_set_message("il campo è = ". $form_state['values']['eta']);
    if (!
is_numeric($contenutocampo))
       {
        
form_set_error('eta', t('devi inserire un eta valida'));
       }
}
?>

Io utilizzo questo con sussesso:

<?php
function candidati_init() {
 
drupal_add_js(drupal_get_path('module', 'candidati') .'/includes/candidati.js');
}
 
?>

Nel form il codice è:
<?
$form['nome'] = array(
'#type' => 'textfield',
'#title' => t('Nome'),
'#maxlength' => 80,
'#size' => 18,
'#attributes' => array('onblur' => 'checkIsEmpty(this)'),
'#required' => TRUE,
);
$options = array('M' => t("Maschio"), 'F' => t("Femmina"));
$form['sesso'] = array(
'#type' => 'radios',
'#title' => t("Tipo"),
'#required' => TRUE,
'#options' => $options,
'#attributes' => array('class' => 'container-inline'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t("Prosegui"),
'#attributes' => array('onclick' => 'return checkIsEmptyFormStep1();'),
);
?>

E nel file js le funzioni sopra chiamate:

function checkIsEmptyFormStep1(){
  //controllo sul form allo step 1
    var elsessoF = document.getElementById('edit-sesso-F');
    var elsessoM = document.getElementById('edit-sesso-M');
    if (elsessoF.value=="" && elsessoM.value=="") {
      jAlert('Inserire il tipo M/F. Il campo e\' obbligatorio.', 'ARCA 24');
      return false;
    }
.....
  return true;
}
function checkIsEmpty(campo){
  //onBlur="checkIsEmpty(this);"
  var nr1 = campo.value;
  nr1len = nr1.length;
    if (nr1len == 0) {
      //alert('Il campo valore '+campo.value+' e\' richiesto!');
      jAlert('Il campo e\' richiesto ' + nr1, 'ARCA 24');
    }
}

Attenzione jAlert è una funzione di jQuery aggiunta da me per gli alert personalizzati, tu puoi usare alert(""); Se hai bisogno di spiegazioni scrivimi pure.
Ciao

Grazie mille ci provo lunedi poi ti saprò dire. grazie ancora per la gentilezza. Ancora una cosa mi viene in mente come hai ricavato l'id dell'elemento della form in document.getElementById('edit-sesso-M');
Ciao e grazie

Ti dò una piccola "chicca": in Drupal si può assegnare l'id all'elemento in questo modo:

$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Subject'),
'#default_value' => $node->title,
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
'#attributes' => array('id' => 'color_scheme_form'),
);

Se non viene impostato '#attributes' => array('id' Drupal crea id automaticamente. Per scoprire gli id degli elementi del tuo form vai in Visualizza > Origine (in IE8) e vedrai che Drupal mette edit- come prefisso al nome dei tuoi elementi.

Waw!

ho provato ora e funziona!!!! Grazie mille