ciao di nuovo!
Allora, ho risitemato il codice anche aiutandomi con l'ottimo reference che hai linkato ed è uscito quanto riporto in basso. Ho lavorato solo per il campo cogn visto che alla fine non funziona. Ho commentato il codice sia per aver conferma se ho capito quello che fa il programma sia per scrivere dubbi su alcune cose.
Come da te suggerito ho lasciato perdere la parte PHP tanto una volta che i dati arrivano sul client nella forma da noi voluta il lato server non c'interessa piu'...
Il form ha un codice piu' lungo e riporto sotto solo quello relativo all'autista...codice:<html> <head> <title>xxx</title> <SCRIPT language=JavaScript> var persone = new Array(); persone[persone.length] = new Array("cxxxxxxxx","federico","Roma Nord","328xxxxxxx","","","","","",0); persone[persone.length] = new Array("De xxxx","Marina","Anguillara","340xxxxxxx","","","","","",0); persone[persone.length] = new Array("pxxxxxxxx","valerio","Roma Sud","320xxxxxxx","20","03","2006","14","12",1); persone[persone.length] = new Array("rossi","mario","Roma Sud","328xxxxxxx","","","","","",1); var row_prec="", col_prec=""; // valori precedenti var pos_mat = 0; // posizione nella matrice var cont_prec=""; // contenuto precedente var cont_digit = ''; // contenuto digitato function completa(ogg) { var rc = ogg.name.split(/_/); // decodifica riga e col - Es: cogn autista var row = rc[1]; //ES: autista var col = rc[0]; //ES: cogn var cont = ogg.value; //ES: carloni //alert("riga: "+row+" colonna: "+col); //stampa un promemoria della colonna che sta scandendo ES: autista cogn if(row != row_prec) // riga diversa: azzera i puntatori { cont_prec = ""; pos_mat = 0; } //Qui mi da' errore: per come è stato definito, cont è un'oggetto? L'errore è "Previsto oggetto" var agg = substr(cont, cont.length-1); // carattere aggiunto - Estrae i caratteri di ciò che è scritto nel textfield.. cont_digit += agg; //..e li mette in cont_digit. ES: Scrivo "c" e cont_digit diventa "c", scrivo poi "a" e cont_digit="ca" ecc. switch (col) //NOTA: LA matrice. Diciamo: persone[record][campo] { case 'cogn': while(persone[pos_mat][0].indexOf(cont_digit) < 0) //Scandisco la matrice sulla colonna relativa al cognome. Parto dalla prima riga e finchè non c'e' un matching tra le lettere //digitate dall'utente nel textfield e quello che è scritto nella matrice, passo alla riga successiva { pos_mat++; } if(pos_mat > persone.length) { alert("non nell'elenco")//Se arrivo alla fine dell'array ovviamente sta digitando i dati di una persona ancora non registrata nel DB return false; } //SE invece riscontra un matching del 100% compila gli altri campi del form con i dati della riga in esame. ogg.form.elements("cogn_"+row).value = persone[pos_mat][0]; ogg.form.elements("nome_"+row).value = persone[pos_mat][1]; ogg.form.elements("gruppo_"+row).value = persone[pos_mat][2];//Attenzione: e' una select! ogg.form.elements("tel_"+row).value = persone[pos_mat][3]; ogg.form.elements("ggFine_"+row).value = persone[pos_mat][4]; ogg.form.elements("mmFine_"+row).value = persone[pos_mat][5]; ogg.form.elements("aaFine_"+row).value = persone[pos_mat][6]; ogg.form.elements("oraFine_"+row).value = persone[pos_mat][7]; ogg.form.elements("minFine_"+row).value = persone[pos_mat][8]; if ( persone[pos_mat][9]==1 ) ogg.form.elements("benefici_"+row).value = "checked";// Funziona così? break; case 'nome': //qualcos di simile break; // ecc }//chiude switch }//chiude function </SCRIPT>
Non sapendo bene come funziona JS, non so se quando scrivo ogg.form.elements("gruppo_"+row).value = persone[pos_mat][2]; vada bene dal momento che i values di gruppo sono numeri mentre in persone ho riportato i nomi per esteso (ovviamente eventualmente la conversione è molto rapida). Idem per mmFine_ (values numerici ed etichette in stringhe)...
Il file completo è su www.bukowski-show.it/autocompletamento2.htm
Spero che riuscirai a scovare l'errore!codice:<META content="MSHTML 6.00.2800.1106" name=GENERATOR></head> <body> <table width="95%" border="1"> <tr> <td width="10%"><h3>Ruolo</h3></td> <td width="11%"><h3>Cognome</h3></td> <td width="11%"><h3>Nome</h3></td> <td width="12%"><h3>Gruppo</h3></td> <td width="11%"><h3>Telefono</h3></td> <td width="18%"><h3>Fine</h3></td> <td width="11%"><h3>Benefici</h3></td> </tr> <tr> <td> <h4>Autista</h4></td> <td><input name="cogn_autista" type="text" id="cogn_autista" value="" size="15" onkeyup="completa(this);" ></td> <td><input name="nome_autista" type="text" id="nome_autista" value="" size="15" onkeyup="completa(this);"> </td> <td><select name="gruppo_autista"> <option value=""></option><option value="5">Anguillara</option> <option value="4">Civitavecchia</option><option value="8">corleone</option><option value="3">Ramazzini</option> <option value="1">Roma Nord</option> <option value="2">Roma Sud</option><option value="7">Viterbo</option></select></td> <td><input name="tel_autista" type="text" value="" size="13" onkeyup="completa(this);" ></td> <td> <h4> <input name="oraFine_autista" type="text" size="2" maxlength="2" value="" onkeyup="completa(this);" > : <input name="minFine_autista" type="text" size="2" maxlength="2" value="" onkeyup="completa(this);" > del <select name="ggFine_autista" id="ggFine_autista"> <option value="01">01</option><option value="02">02</option> <option value="03">03</option> <option value="04">04</option> <option value="05">05</option> <option value="06">06</option> <option value="07">07</option> <option value="08">08</option> <option value="09">09</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mmFine_autista" id="mmFine_autista"> <option value="01">Gen</option><option value="02"SELECTED>Feb</option> <option value="03">Mar</option> <option value="04">Apr</option> <option value="05">Mag</option> <option value="06">Giu</option> <option value="07">Lug</option> <option value="08">Ago</option> <option value="09">Set</option> <option value="10">Ott</option> <option value="11">Nov</option> <option value="12">Dic</option> </select> <select name="aaFine_autista" id="aaFine_autista"> <option value="2005"SELECTED>2005</option> <option value="2006">2006</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> </select> </h4></td> <td><div align="center"> <input name="benefici_autista" type="checkbox" value="1" onkeyup="completa(this);" ></div> </td> </tr> </table> </body> </html>
Grazio ancora, stavolta 10^10!![]()
PS: Tranquillo, i cell sono fasulli, almeno spero!![]()


Rispondi quotando