Newsgroup: it.comp.lang.javascript
Titolo: Riporto dati in campi da Combo

Salve a tutto il NG.
Essendo nuovo in questo campo (ma nuovo, nuovo!), e per questo mi presento
sono "Maurizio", mi sono imbattuto in alcuni problemi che mi hanno fatto
slittare nell'ambito Javascript.
Premetto che sono partito da un progetto in ASP, e i guru dello stesso NG
mi hanno dirottato su questo NG.
Il fatto :
In ASP ho creato una combo in una Form con origine dati una Tab_X.
La visualizzazione della combo prevede 4 campi. (Es.
ID=1;Tipologia:Oggettistica;Categoria:Penne;Reparto:10)
Scegliendo il record che mi serve logicamente nella combo vengono
memorizzati i dati di un solo campo (quello che gli ho impostato di
default - l'ID -).
Il problema:
come faccio dopo aver scelto il valore di cui sopra a riportarmi i
restanti dati del record (
Tipologia:Oggettistica;Categoria:Penne;Reparto:10 ) in altrettanti campi
presenti nel modulo?
Spero di essere stato chiaro.
Mi aiutate per favore? mi hanno detto che è una cosa da fare con un
Javascript.
Grazie infinite.
-- 
Pablitomf (Maurizio Facciuti)
“Quando non ti eserciti ricorda che qualcuno in qualche posto si sta
allenando e, quando lo incontrerai, ti batterà”.
Ed Macauley 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 presenti nel modulo?
<ipotesi>
a) hai una select (quella che chiami combo) con name="s"
b) hai 3 campi di testo che conterranno i valori di cui parli che
chiameremo "T1","T2","T3"
c) stiamo utilizzando browser moderni (con alcuni vecchi browser l'onchange
della select non esiste e dovrai usare un altro tag. Con netscape4 non puoi
direttamente leggere il value della select ma devi passare per le options)
d) il value della select ha sempre questa sintassi (altrimenti la function
segnalerà errore)
</ipotesi>
<tesi>
select onchange="registra(this)"
function registra(sender) {
 var arr=sender.value.split(";"); //crea un array suddividendo la stringa
per ;
 with(sender.form) {
  elements["T1"].value=arr[1].split(":")[1];
  elements["T2"].value=arr[2].split(":")[1];
  //idem per il terzo elemento
 }
}
</tesi>
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

Cristiano Larghi ha scritto:




Sei un grande....e ti ringrazio davvero... ma una domanda da PRINCIPIANTE
ti è dovuta... dove inserisco il tuo codice? Nel codice ASP della pagina o
in un file a parte? e se è così, con quale estensione? Ti RI-ringrazio!


 in un file a parte? e se è così, con quale estensione? Ti RI-ringrazio!
Uhm
un consiglio che posso darti è di studiarti un po' le basi che, vedrai, ti
torneranno utilissime.
Comunque:
 - l'onchange devi metterlo nella select (non so come la costruisci, devi
ottenere un <select onchange="registra(this)".......>...</select>)
 - la function puoi metterla nell'head racchiusa tra il tag script (<script
type="text/javascript">function ...</script>) oppure racchiuderla in un
file che ha estensione .js e caricarla come sopra usando
src="tuapagina.js".
-- 
"e mai che mi sia venuto in mente
 di essere più ubriaco di voi
 di essere molto più ubriaco di voi"
									  F.D.A.

 src="tuapagina.js".
Fatto pari pari come da te suggerito... (non ho creato il file .js... ho
messo il cod all'interno)...
Ma quando scelgo il valore, non succede nulla...
posso postarti il codice della pagina e vedi se puoi aiutarmi?
Ti ringrazio infinitamente della cortesia e della disponibilità.
Qualora ti servisse qualche aiuto nel mio campo mi trovi su
it.comp.appl.access sono inquilino di annata.


 it.comp.appl.access sono inquilino di annata.
Ok, grazie (ma con access ho [quasi] chiuso da parecchio tempo)
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

 Puoi postarlo qua ma un sunto (...)
Certo... era quello che intendevo.
http://www.geviservices.it/MaurizioASPFatture/addProva.asp
Questo il codice della pagina:
<html>
<head>
<title>GESTIONE RECORD</title>
</head>
<script type="text/javascript">
function registra(sender) {
var arr=sender.value.split(";"); //crea un array suddividendo la stringa
per ;
with(sender.form) {
elements["T1"].value=arr[1].split(":")[1];
}
}
</script>
<!--#include file="connessione.asp"-->
<body>
        <center>
          <p>&nbsp;</p>
          <table border="1" width="19" cellspacing="1" style="border: 1
solid #336699" bordercolor="#C0C0C0">
            <tr>
              <td width="662" bgcolor="#005984" height="22"
valign="middle" align="left" colspan="2">
                <p align="center"><font face="Verdana" color="#FFFFFF"
size="2"><b>.:
                Prova Inserimento dati da Combo &lt;select&gt;
:</b></font></td>
            </tr>
            </center>
        <center>
            </center>
          <center>
          <tr>
            <td width="49" bgcolor="#F8F8F8" height="30" valign="middle"
align="center"><b><font face="Verdana" color="#336699"
size="1">Cliente</font></b></td>
            <td width="607" bgcolor="#F8F8F8" height="30" valign="middle"
align="left">
              <p align="left">&nbsp;
<%
'inizio ciclo lettura riubriche 
set rst = ConnDett.Execute("SELECT Tbl_Clienti.RagSociale AS
descrizionevalore, Tbl_Clienti.Indirizzo, Tbl_Clienti.ID FROM Tbl_Clienti
ORDER BY Tbl_Clienti.RagSociale;")
%>
<!--inizio box lo sapevate che -->
<select onchange="registra(this)" name="Cliente" size="1" style="border: 1
groove #C0C0C0">
<%
do while not rst.EOF
%>
<option  id='<%=rst("id")%>'
value='<%=rst("descrizionevalore")%>'><%=rst("descrizionevalore")%>;<%=rst("Indirizzo")%></option>
<%
	rst.MoveNext
loop
%>
</select>
<%
set rst = nothing
set connessioneMDB = nothing
%>
              </td>
          </tr>
          <tr>
            <td width="49" bgcolor="#F8F8F8" height="30" valign="middle"
align="center"><b><font face="Verdana" color="#336699"
size="1">T1</font></b></td>
            <td width="607" bgcolor="#F8F8F8" height="30" valign="middle"
align="left">
        <font face="Verdana" size="1"><input name="T1" maxlength="50"
size="70" style="border: 1 groove #C0C0C0"></font>
              </td>
          </tr>
          </table>
        </center>
<p>&nbsp;</p>
</body>
</html>
Grazie


 value='<%=rst("descrizionevalore")%>'><%=rst("descrizionevalore")%>;<%=rst("Indirizzo")%></option>
Qua stai ottenendo (meglio fare i test con pagine htm così sappiamo
esattamente cosa restituisce al client) un qualcosa del tipo
<option id="1111" value="descrizione">Descrizione;Indirizzo</option>
Mentre da quel che avevo capito doveva esserci qualcosa del tipo
<option id="1111"
value="ID:1111;Tipologia:Descrizione;Categoria:categoriadelloggetto;Reparto:10">Descrizione</option>
Questo è quanto avevi scritto, invece vedo tutt'altro (nel value c'è solo
un valore, nel text corrispondente ce ne sono altri 2 anziché 3 e non hanno
un prefisso descrittivo separato da due punti...tutta un'altra cosa).
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

Cristiano Larghi ha scritto:
[CUT][CUT]
Grazie tante per le dritte... ora funziona... ho risolto così :
<html>
<head>
<title>GESTIONE RECORD</title>
</head>
<script type="text/javascript">
function registra(sender) {
frmMain.T1.value=sender.options[sender.selectedIndex].innerText.split(";")[0];
frmMain.T2.value=sender.options[sender.selectedIndex].innerText.split(";")[1];
frmMain.T3.value=sender.options[sender.selectedIndex].innerText.split(";")[2];
}
</script>
<!--#include file="connessione.asp"-->
<body>
<FORM name="frmMain">

descrizionevalore, Tbl_Clienti.Indirizzo, Tbl_Clienti.Comune,
Tbl_Clienti.Cap, Tbl_Clienti.ID FROM Tbl_Clienti ORDER BY
Tbl_Clienti.RagSociale;")
%>
<!--inizio box lo sapevate che -->
<select onchange="registra(this)" name="Cliente" size="1" style="border: 1
groove #C0C0C0">
<option></option>
<%
do while not rst.EOF
%>
<option  id='<%=rst("id")%>'
value='<%=rst("descrizionevalore")%>'><%=rst("descrizionevalore")%>;<%=rst("Indirizzo")%>;<%=rst("Comune")%>;</option>
<%
	rst.MoveNext
loop
%>
</select>
<%
set rst = nothing
set connessioneMDB = nothing
%>
              </td>
          </tr>
          <tr>
            <td width="49" bgcolor="#F8F8F8" height="30" valign="middle"
align="center"><b><font face="Verdana" color="#336699"
size="1">T1</font></b></td>
            <td width="607" bgcolor="#F8F8F8" height="30" valign="middle"
align="left">
        <font face="Verdana" size="1"><input name="T1" maxlength="50"
size="70" style="border: 1 groove #C0C0C0"></font>
              </td>
          </tr>
          <tr>
            <td width="49" bgcolor="#F8F8F8" height="30" valign="middle"
align="center"><b><font face="Verdana" color="#336699"
size="1">T2</font></b></td>
            <td width="607" bgcolor="#F8F8F8" height="30" valign="middle"
align="left">
        <font face="Verdana" size="1"><input name="T2" maxlength="50"
size="70" style="border: 1 groove #C0C0C0"></font>
              </td>
          </tr>
          <tr>
            <td width="49" bgcolor="#F8F8F8" height="30" valign="middle"
align="center"><b><font face="Verdana" color="#336699"
size="1">T3</font></b></td>
            <td width="607" bgcolor="#F8F8F8" height="30" valign="middle"
align="left">
        <font face="Verdana" size="1"><input name="T3" maxlength="50"
size="70" style="border: 1 groove #C0C0C0"></font>
              </td>
          </tr>
          </table>
        </center>
<p>&nbsp;</p>
</form>
</body>
</html>


 frmMain.T1.value=sender.options[sender.selectedIndex].innerText.split(";")[0];
usa .text anziché .innerText, almeno funziona (a meno di altri problemi
nella pagina) anche con browser che non siano IE.
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 nella pagina) anche con browser che non siano IE.
Dengiu!
Cristiano, ho notato che se inserisco da altra Form un record nella
tabella che mi funge da RecordSource della SELECT ( ;-D ), ritornando
nella pagina che la contiene, noto che la stessa non è aggiornata nel suo
contenuto... basta fare un refresh della pag. con F5 e Oplà la SELECT si
ripopola correttamente... come fare ciò in automatico?


 ripopola correttamente... come fare ciò in automatico?
Se intendi che fai un insert e non lo vedi risolvi lato server (se stai
inserendo poi fai un redirect a sè stesso senza inserire, oppure carica il
contenuto della select dopo aver inserito).
Lato client puoi mettere body onload="window.location.reload()" se non hai
form con method post.


 form con method post.
L'ho usato e racchiuso tra <% ... %>... ma non me lo riconosce.


 L'ho usato e racchiuso tra <% ... %>... ma non me lo riconosce.
Mi è difficile capire perché non ti ripopola correttamente la select senza
vedere il codice (Comunque è meglio chiedere nel newsgroup asp).
Comunque body onload *NON* va messo tra <% e %> essendo codice client.


 Comunque body onload *NON* va messo tra <% e %> essendo codice client.
Certo, l'avevo usato senza <% e %>, ma riconoscendomelo nella Form come
testo ho pensato ce ne fosse stato bisogno... bhè ne nell'uno, ne
nell'altro modo FUNGE.
Ciao e sempre grazie di questi suggerimenti.


 nell'altro modo FUNGE.
Impossibile, <body onload="window.location.reload()"> non può non
funzionare (attenzione solo, ovviamente, a scriverlo via asp solo quando
serve, altrimenti ti farà reload infiniti...)
