7 messaggi dal 21 settembre 2015
Salve
Ho un form asp in cui alcuni campi sono dropdown lists dipendenti tra loro, vale a dire una dropdown in cui scegliere la regione e una volta scelta, compare la seconda dropdown con le provincie di quella regione, e quindi la terza con i comuni di quella provincia.
Naturalmente per i vari campi dropdown non ho riportato tutte le <option> ma le ho richiamate da un database.

Sostanzialmente cosi':
<tr width="100%">
<td><div id="AHAH_regioni"></div></td>
<td><div id="AHAH_provincie"></div></td>
<td><div id="AHAH_comuni"></div></td>
</tr>

Nel <body> della pagina ho:
onload="caricaPagina('dbcomuni.asp?type=regioni','AHAH_regioni')

E la pagina dbcomuni.asp ha le istruzioni per il funzionamento a cascata dei campi

Il form crea un record su un database.

Ora, in fase di compilazione del form tutto funziona correttamente, le dropdown lists si aprono a cascata con i dati corretti dalla tabella dei comuni ... ma quando vado ad inviare il form i dati contenuti nei tre campi vengono passati, utilizzando IE10 o IE11 solo in visualizzazione compatibilita', mentre non vengono passati se si disattiva questa modalita'. Allo stesso modo, i dati di quei campi NON vengono passati usando Chrome come browser.
Quali aggiornamenti devo fare per rendere i form perfettamente eseguibili con tutti i principali browsers?
grazie!
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao e benvenuto nel forum!
Dobbiamo cercare di capire quale errore si sta verificando, e poi risolverlo.
Dato che il comportamento cambia in base al browser, è probabile che il problema sia in uno dei blocchi di codice javascript che stai usando per gestire le dropdownlists.

Potrebbe trattarsi anche di una questione banale, tipo che manca un punto e virgola al termine di qualche istruzione javascript.

Lo puoi sapere con esattezza aprendo la console del tuo browser (premi CTRL+Shift+J). Lì appariranno eventuali errori javascript, postali qui così vediamo come risolverli.
Posta anche le righe di codice javascript che lo stanno causando.

ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 21 settembre 2015
Ciao Moreno
Ho usato la console ma non ha rilevato errori javascript, ha solo mostrato un paio di avvisi su errori html non determinanti che, anche dopo la correzione, non cambiano il funzionamento del form.

Qual è il modo migliore per postare i codici javascript? Non vorrei postare una roba troppo lunga ...
grazie, Francesco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Francesco,
ok, pazienza, la console non ci è stata d'aiuto. Il problema deve essere da qualche altra parte.

fmirag ha scritto:
Qual è il modo migliore per postare i codici javascript?

L'ideale sarebbe vedere la tua pagina in funzione ma per ora posta giusto le righe di codice che usi per aggiungere dinamicamente le voci alle dropdownlist.

Hai detto che "i dati non vengono passati" ma non sono sicuro di aver capito cosa intendi. Quale problema si verifica, tra questi due?
  • Le dropdownlist non si "aprono a cascata", cioè non vengono affatto popolate dalle voci quando si seleziona qualcosa dalla prima dropdownlist.
  • Tutte le dropdownlist vengono popolate correttamente ma poi, di fatto, il server non sembra ricevere i dati selezionati. (Questo lo puoi verificare dal pannello degli strumenti di sviluppo del browser - tasto F12 - dalla scheda "Rete" o "Network". Lì puoi vedere le richieste che il client invia al server, compresi i dati del form).


ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 21 settembre 2015
Ciao Moreno.
Le dropdownlists si aprono perfettamente a cascata, popolate correttamente con i dati da tabella database ... e questo con qualunque browser si compili il form.
Dopodiche', nel sottomettere il form (che crea un record su database) tutto sembra funzionare perfettamente, nel senso che non ci sono messaggi di errore ...
Senonche' il record creato sul database risulta correttamente popolato con tutti i dati passati form (da campi testo, dropdown, memo ecc) ad eccezione di quelli selezionati con le dropdownlists dinamiche, i cui campi sul database rimangono vuoti. Questo, come detto, a meno che per la compilazione del form non si usi come browser una vecchia versione di IE (fino a 7), oppure una recente fino all'ultima (11) ma in modalita' "visualizzazione compatibilita'". Senza questa modalita', o con uno qualsiasi degli altri browser (Safari, Chrome, Edge) si verifica l'errore di cui sopra.
Di conseguenza penso che il problema non stia nei codici di creazione delle ddlist dinamiche (altrimenti non funzionerebbero...) ma nella impostazione del form stesso.

Provo comunque a indicarti un po' di codici.
Nella pagina di compilazione del form ho, nella <head> il seguente script java

<script type="text/javascript" language="javascript">
//<![CDATA[
url      = "http://www.miosito.com/";
d      = document;
preloadText = "Generazione lista...";
function caricaPagina(pagina,idLayer) 
{
  if (d.getElementById) {var x=(window.ActiveXObject)?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();}
  if (x) 
    {
    d.getElementById(idLayer).innerHTML = preloadText;
      x.onreadystatechange = function() 
                 {
                    if (x.readyState == 4 && x.status == 200) 
                    {
                     el=d.getElementById(idLayer);el.innerHTML = x.responseText;
                 }
                 }
     x.open("GET", url + pagina, true);
      x.send(null);
    }
}
//]]>
</script>


Dopodiche':
<body style= onload="caricaPagina('dbcomuni.asp?type=regioni','AHAH_regioni'); caricaPagina('dbsettori.asp?type=settori','AHAH_settori')">
per caricare le pagine dbcomuni.asp e dbsettori.asp che gestiscono le due ddlists dinamiche. Non so se devo postare anche le due suddette pagine, perche' come detto si aprono e si popolano correttamente ...

Quindi, l'apertura del form:
<FORM action=newco.asp method="post" name="Form1" onsubmit="return checkform()">

Tralascio di postare le righe di codice relative ai normali campi testo, memo ecc, ed ecco invece le righe relative alle due ddlists dinamiche:
<tr><td><div id="AHAH_regioni"></div></td>    
<td><div id="AHAH_provincie"></div></td>
<td><div id="AHAH_comuni"></div></td>
<td><div id="AHAH_cap"></div></td>
</tr>
<tr>
<td height="27"><div id="AHAH_settori"></div></td>
<td height="27"><div id="AHAH_categorie"></div></td>
</tr>


E infine la pagina newco.asp che gestisce il form e crea il record sul database (credo che l'inghippo possa essere qui):
<!--METADATA TYPE="typelib" UUID="CD000000-8B95-11D1-82DB-00C04FB1625D" NAME="CDO for Windows 2000 Type Library" -->
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" -->
<%
dim strCode
strCode="innovatel"
dim intVolta
intVolta="0"

Set Conn=Server.CreateObject("ADODB.Connection")
strConn="driver={Microsoft Access Driver (*.mdb)}; "
strConn=strConn & " DBQ=" & Server.MapPath("/mdb-database/procust.mdb")
strConn=strConn & ";pwd=" & strCode
Conn.Open strConn

sql = "SELECT * FROM prosp "
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn ,3,3

rs.addnew
rs(9)=request.form("rag_soc")
rs(10)=request.form("f_giur")
rs(11)=request.form("indirizzo")
rs(12)=request.form("civico")
rs(13)=request.form("cap")
rs(14)=request.form("comuni")
rs(15)=request.form("provincie")
rs(16)=request.form("regioni")
rs(18)=request.form("email")
rs(22)=request.form("tel")
rs(30)=request.form("settori")
rs(31)=request.form("categorie")

rs.update
rs.Close
set rs = Nothing
conn.Close
set conn = Nothing
%>

<script>
document.location.replace('conferma.asp');
</script>


E' tutto. Sono stato un po' lungo?
Ti ringrazio in anticipo per la pazienza e il supporto
Francesco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Francesco,
ok, il problema quindi sembra essere che i valori delle dropdownlist non vengono inviati insieme a quelli delle altre caselle.

Dovresti verificarlo come ti dicevo:

dal pannello degli strumenti di sviluppo del browser - tasto F12 - dalla scheda "Rete" o "Network". Lì puoi vedere le richieste che il client invia al server, compresi i dati del form.

Tra i dati del form dovrebbero mancare i valori delle dropdownlists, che immagino siano "comuni", "provincie" e "regioni".

La causa potrebbe essere qui...
el=d.getElementById(idLayer);el.innerHTML = x.responseText;

...nel responseText che il server ti restituisce.
Se il codice HTML che assegni alle DIV non è ben formato o se alle dropdownlist manca l'attributo name, allora potrebbero non essere considerate come campi da inviare insieme al form.

La mia ipotesi è che ci sia dell'HTML non ben formato che fa cadere le caselle fuori dal form.
Dovresti verificarlo facendo tasto destro su una delle dropdownlist e cliccando "Ispeziona elemento" da Chrome. Quello che vedrai è un albero logico degli elementi che il browser si è costruito in base al tuo HTML.
Se l'HTML non era ben formato, può darsi che il browser lo abbia interpretato in maniera inattesa. Dovresti (pazientemente) verificare se le dropdownlist (tag <select>) in quella visualizzazione risultato dentro o fuori il tag <form>.
E ovviamente verifica che abbiano un attributo name, che è una condizione essenziale affinché il valore possa arrivare al server.

ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 21 settembre 2015
Ciao Moreno
Ho seguito le tue indicazioni, ma ispezionando gli elementi dropdownlist su Chrome mi sembra sia tutto a posto, i tag <select> hanno il name. Inoltre anche sulla scheda rete non mi sembra di vedere errori.
Ho fatto la stessa cosa da IE11 con "esamina elemento"; curioso notare come a parità di codice da me scritto vi siano delle piccole differenze nella "lettura" dei codici da parte dei due browsers Chrome e IE11 ... ma nulla che ripari l'errore anche dopo aver fatto io delle modifiche.
A questo punto, poiche' mi dicevi che l'ideale sarebbe stato vedere la pagina live ... eccola
http://www.networkeritaly.com/dynamic.asp
Se compili il form verrai poi reindirizzato a una pagina dove sono richiamati i records dal database, e vedrai che il campo pr (provincia), cosi' come i campi "settore" e "categoria" saranno vuoti, mentre vedrai che il campo "nome azienda" e' stato regolarmente popolato.
Se poi ripeti la compilazione usando IE11 in visualizzazione compatibilita' noterai invece che tutti i campi sono compilati
Inoltre puoi provare tu stesso a ispezionare gli elementi ddlist con Chrome, sicuramente vedrai qualcosa che a me come profano sfugge
Sono davvero curioso di capire dove sia il problema!!
grazie
Francesco
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Francesco,
grazie per la pagina live, ora il problema è chiaro.

Ti confermo che le dropdownlists cadono fuori dal form. Ne trovi riscontro in questa immagine, che illustra il DOM, ovvero l'albero logico degli elementi nella tua pagina (usando Chrome).
http://1drv.ms/1MsVtxv

Come vedi, il form risulta aperto e immediatamente chiuso. La dropdownlist (il tag <select>) è più in basso, fuori dal form.

La prima cosa da fare quindi è correggere questa situazione, che è stata causata dalla posizione del tag <form> nel codice HTML della tua pagina.
Guarda dove è posizionato ora:
</td>
<FORM action=newco.asp method="post" name="Form1" onsubmit="return checkform()">                
<td height="5" valign="top" width="670">

Non è consentito che si trovi tra due celle. Dovresti spostarlo al di fuori della tabella.
Aiutati con il validatore del W3C per correggere tutti i problemi di markup.
https://validator.w3.org/check?uri=http%3A%2F%2Fwww.networkeritaly.com%2Fdynamic.asp&charset=%28detect+automatically%29&doctype=Inline&group=0

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.