6 messaggi dal 27 maggio 2009
SALVE, HO QUESTO SCRIPT , AD USARLO CON UNA SELECT E LA SUA CONCATENATA FUNZIONA, MA QUANDO CERCO DI FARE IN MODO DI CREARE 10 SELECT CONCATENATE NON VA. DOVREI MODIFICARE IN MODO SEQUENZIALE L'ID DEL CAMPO SELECT PRINCIPALE E ID DEL CAMPO SECONDARIO, NELLA ZONA PROGRAMMAZIONE IN JAVASCRIPT:
IL VALORE .....TAB3LLA.... DEVE ESSERE MODIFICABILE IN MODO SEQUENZIALE.
var valorecampo = document.listaADD.TAB3LLA.options[document.listaADD.TAB3LLA.selectedIndex].value;


CMQ DI SEGUITO L'INTERO SCIPT

<!--#include file="auto_db.asp"-->
<!--#include file="db.asp"-->
<script language="javascript">
var ricerca_pro;
function cerca()
{
var valorecampo = document.listaADD.TAB3LLA.options[document.listaADD.TAB3LLA.selectedIndex].value;


// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
ricerca_pro = new XMLHttpRequest();
ricerca_pro.onreadystatechange = ricevi;
ricerca_pro.open("GET", "auto_cerca.asp?reg="+valorecampo,true);
ricerca_pro.send(null);



// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
ricerca_pro = new ActiveXObject("Microsoft.XMLHTTP");
if (ricerca_pro) {
ricerca_pro.onreadystatechange = ricevi;
ricerca_pro.open("GET", "auto_cerca.asp?reg="+valorecampo,true);
ricerca_pro.send();
}
}
}


function ricevi() {
var strRes;
var arrValori;
if (ricerca_pro.readyState == 4) {
strRes=ricerca_pro.responseText;
arrValori=strRes.split("|");
document.listaADD.R3CORD.options.length=0;
for(i=0;i<arrValori.length;i++)
{
document.listaADD.R3CORD.options[document.listaADD.R3CORD.options.length]= new Option(arrValori[i].split("|"));
}
}
}
</script>

<%'apro connessione e istanzio oggetti
OpenDB(xDb_Str)
'query per la prima select
rossiSQL = "SELECT DISTINCT NOME_TABELLA FROM Z_DATI_RECORD_ order by NOME_TABELLA asc"
rossi.open rossiSQL
%>
<form action="<%=Request.ServerVariables("URL")%>" method="post" id="listaADD" name="listaADD">
<%FOR PASSAGGI= 1 TO 10%>
<label>NOME_TABELLA
<select name="TAB3LLA1" ID="TAB3LLA" accesskey="1" tabindex="1" onchange="cerca()">
<option selected="selected" value=0>Scegli NOME_TABELLA</option>
<%do while not rossi.eof%>
<option value="<%=rossi("NOME_TABELLA")%>"><%=rossi("NOME_TABELLA")%></option>
<%rossi.movenext
loop
CloseDB%>
</select>
</label>
<label>
NOME_RECORD
<select name="R3CORD1" ID="R3CORD" accesskey="2" tabindex="2">
</select>
</label>
<%NEXT%>
</FORM>
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
perdonami, penso di non aver capito il risultato che intendi ottenere.

Vedo che fai un ciclo da 1 a 10:
<%FOR PASSAGGI= 1 TO 10%>

...e questo ti stampa 10 caselle a discesa tutte uguali che contengono i nomi di alcune tabelle. Tu vuoi far selezionare all'utente un massimo di 10 tabelle su cui effettuare una ricerca?

Se è questo il problema, puoi semplicemente consentire la selezione multipla su un'unica casella <select> aggiungendo l'attributo multiple, come vedi fare qui:
http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_multiple
La selezione multipla avviene tenendo premuto il tasto CTRL e cliccando sulle varie voci in elenco.

In alternativa potresti presentare l'elenco delle tabelle mettendo una checkbox al fianco di ciascuna. Così sarà più intuitivo per l'utente selezionare le voci che gli interessano. Poi, leggere i valori delle caselle spuntate sarà molto semplice. Ecco una demo.
http://jsfiddle.net/wMbQF/

ciao,
Moreno

Enjoy learning and just keep making
6 messaggi dal 27 maggio 2009
come puoi vedere nello script il dato "R3CORD" e il dato "TAB3LLA" devono essere variabile.
devo fare un LOOP con X passagi e quindi selezioni primarie e secondarie. quindi i dati "TAB3LLA" e "R3CORD" devono avere valori del tipo

selezione primaria "TAB3LLA1", selezione secondaria "R3CORD1"
selezione primaria "TAB3LLA2", selezione secondaria "R3CORD2"
selezione primaria "TAB3LLA3", selezione secondaria "R3CORD3"
selezione primaria "TAB3LLA4", selezione secondaria "R3CORD4"
selezione primaria "TAB3LLA5", selezione secondaria "R3CORD5"
selezione primaria "TAB3LLA6", selezione secondaria "R3CORD6"
ecc...

spero di essere stato chiaro.
PS: se mi segnali un'altro tipo di SCRIPT, posso benissimo utilizzarne uno nuovo.

ciao e grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

bitmanrc ha scritto:

il dato "R3CORD" e il dato "TAB3LLA" devono essere variabile.

Ok, puoi renderli variabili in questo modo:
<select name="TAB3LLA<%= PASSAGGI %>" ID="TAB3LLA" accesskey="1" tabindex="1" onchange="cerca()">
Qui ho usato il valore di PASSAGGI nel generare il nome di TAB3LLA. Man mano che il ciclo da 1 a 10 avanza, le select avranno nomi progressivi tipo TAB3LLA1, TAB3LLA2, TAB3LLA3, ecc... La stessa cosa la puoi fare anche nella select dei record.
<select name="R3CORD<%= PASSAGGI %>" ID="R3CORD" accesskey="2" tabindex="2">


bitmanrc ha scritto:

PS: se mi segnali un'altro tipo di SCRIPT, posso benissimo utilizzarne uno nuovo.

Posso solo darti piccoli consigli perché non ho capito cosa stai realizzando. Cioè, vedo che fai selezionare all'utente una lista di record ma non so a quale scopo.

Modificare lo script è necessario perché la funzione cerca() non sa da quale select l'hai invocata, quindi devi passargli il riferimento della select corrente affinché riesca a recuperare il valore selezionato. Questo pezzo di codice:
onchange="cerca()"

cambialo così:
onchange="cerca(this)"
Ora modifica la funzione cerca.
function cerca(tabella)
{
var valorecampo = tabella.value;
Modifica anche l'invocazione alla funzione ricevi. Devi fare in modo che il riferimento della select passi anche a lei.
ricerca_pro.onreadystatechange = function(){ricevi(tabella);};

e infine cambia la funzione ricevi
function ricevi(tabella) { 

e il ciclo che usi per riempire la select R3CORD
var idTabella = tabella.id.substr("TAB3LLA".length);
var record = document.getElementById("R3CORD" + idTabella);
record.options.length=0;
for(i=0;i<arrValori.length;i++)
{
record.options[record.options.length]= new Option(arrValori[i].split("|"));
}


Forse ci sono altri sistemi per risolvere il problema e usare jQuery ti aiuterebbe moltissimo nella scrittura del javascript.

ciao,
Moreno.
Modificato da BrightSoul il 18 settembre 2013 20.54 -

Enjoy learning and just keep making
6 messaggi dal 27 maggio 2009
questo e' il risultato
http://www.ilsentierone.it/EXCEZIONALE/nuova/AUTO_CASELLA.asp

qui di seguito i file
8il file ../db.asp qui non inserito include i dati di connessione al MYSqL

NON MI FUNZIONA COSI FATTO:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
nome file :AUTO_CASELLA.asp (iniziale)

<!--#include file="auto_db.asp"-->
<script language="javascript">
var ricerca_pro;
function cerca(tabella)
{
var valorecampo = tabella.value;


// branch for native XMLHttpRequest object
if (window.XMLHttpRequest) {
ricerca_pro = new XMLHttpRequest();
ricerca_pro.onreadystatechange = function(){ricevi(tabella);};
ricerca_pro.open("GET", "auto_cerca.asp?reg="+valorecampo,true);
ricerca_pro.send(null);
// branch for IE/Windows ActiveX version
} else if (window.ActiveXObject) {
ricerca_pro = new ActiveXObject("Microsoft.XMLHTTP");
if (ricerca_pro) {
ricerca_pro.onreadystatechange = function(){ricevi(tabella);};
ricerca_pro.open("GET", "auto_cerca.asp?reg="+valorecampo,true);
ricerca_pro.send();
}
}
}
function ricevi(tabella) {
var idTabella = tabella.id.substr("TAB3LLA".length);
var record = document.getElementById("R3CORD" + idTabella);
record.options.length=0;
for(i=0;i<arrValori.length;i++);
{
record.options[length.option.length]=new Option(arrValori[i].split("|"));
}
}
</script>
<%
Set aquila = Server.CreateObject("ADODB.Connection")
aquila.Open Stringa_MYSQL_db
%>
<form action="<%=Request.ServerVariables("URL")%>" method="post" id="listaADD" name="listaADD">

<%for passaggi = 1 to 9%>
<%
SommaRec=0
SQLBUMBI="SELECT DISTINCT NOME_TABELLA FROM Z_DATI_RECORD_ order by NOME_TABELLA asc"
Set rossi=Server.CreateObject("ADODB.Recordset")
rossi.cursorlocation=3
rossi.Open SQLBUMBI, aquila, 1, 2
TotRec=rossi.RecordCount

Do While (Not rossi.Eof) And (SommaRec < TotRec )
SommaRec=SommaRec + 1
%>
<label>NOME_TABELLA <%=passaggi%><select name="TAB3LLA<%=passaggi%>" ID="TAB3LLA<%=passaggi%>" accesskey="1" tabindex="1" onchange="cerca(this)">
<option selected="selected" value=0>Scegli NOME_TABELLA <%=passaggi%></option>
<%do while not rossi.eof%>
<option value="<%=rossi("NOME_TABELLA")%>"><%=rossi("NOME_TABELLA")%></option>
<%rossi.movenext%>
<%loop%>
</select></label>
<label>NOME_RECORD <%=passaggi%><select name="R3CORD<%=passaggi%>" ID="R3CORD<%=passaggi%>" accesskey="2" tabindex="2"></select></label>
<br><br>
<%
Loop
rossi.Close
Set rossi=Nothing
%><%next%>
<% aquila.Close
Set aquila = Nothing%>
</FORM>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
nome file :AUTO_CERCA.ASP (secondario)

<!--#include file="AUTO_db.asp"-->
<%
SommaRec=0
'''''''''''SQLBUMBI="SELECT NOME_RECORD FROM Z_DATI_RECORD_ WHERE NOME_TABELLA='" & reg & "' order by NOME_RECORD DESC"
SQLBUMBI="SELECT distinct NOME_RECORD FROM Z_DATI_RECORD_ order by NOME_RECORD DESC"
Set rissa=Server.CreateObject("ADODB.Recordset")
rissa.cursorlocation=3
rissa.Open SQLBUMBI, aquila, 1, 2
TotRec=rissa.RecordCount

Do While (Not rissa.Eof) And (SommaRec < TotRec )
primo = 0
if not rissa.eof then
do while not rissa.eof
if primo = 0 then
primo = 1
array_NOME_RECORD = rissa("NOME_RECORD")
else
array_NOME_RECORD = rissa("NOME_RECORD") & "|" & array_NOME_RECORD
end if
rissa.movenext
loop
end if
w(array_NOME_RECORD)
rissa.Close
Set rissa=Nothing
%>

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
nome file :AUTO_DB.asp (file supporto)

<!--#include file="../db.asp"-->

<%

'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- CursorLocationEnum Values ----
Const adUseServer = 2
Const adUseClient = 3

'---- CommandTypeEnum Values ----
Const adCmdUnknown = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004
Const adCmdFile = &H0100
Const adCmdTableDirect = &H0200



sub w(sText)
RESPONSE.WRITE sText & vbCrLf
end sub

%>
Modificato da bitmanrc il 19 settembre 2013 16.24 -
Modificato da bitmanrc il 19 settembre 2013 16.52 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
sono sparite delle parti importanti dalla funzione ricevi. La riscrivo completamente, sperano che non ci siano errori.
function ricevi(tabella) {
  var strRes;
  var arrValori;
  if (ricerca_pro.readyState == 4) {
    strRes=ricerca_pro.responseText;
    arrValori=strRes.split("|");

    var idTabella = tabella.id.substr("TAB3LLA".length);
    var record = document.getElementById("R3CORD" + idTabella);
    record.options.length=0;
    for(i=0;i<arrValori.length;i++)
    {
      record.options[record.options.length]= new Option(arrValori[i].split("|"));
    }
  }
}

Se non dovesse funzionare ancora, apri la console Javascript del tuo browser e controlla se si verificano degli errori. Ti aiuteranno a capire come risolvere il problema.

ciao,
Moreno
Modificato da BrightSoul il 19 settembre 2013 21.53 -

Enjoy learning and just keep making
6 messaggi dal 27 maggio 2009
grazie dell'attenzione, adesso funziona, ma in modo paraziale.
se seleziono la seconda SELECT_primaria o la terza e cosi via, cambia solo la prima SELECT_secondaria.

come puoi vedere anche tu su:
http://www.ilsentierone.it/EXCEZIONALE/nuova/AUTO_CASELLA.asp

non riesce a leggere IDTABELLA, nella funzione ricevi()....

almeno credo :-(
Modificato da bitmanrc il 20 settembre 2013 11.11 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
bisogna rendere variabile anche (e soprattutto) l'ID delle select. Usa la variabile PASSAGGI anche nell'attributo id.
<select name="TAB3LLA<%= PASSAGGI %>" ID="TAB3LLA<%= PASSAGGI %>"


Stessa cosa per la select dei record.
<select name="R3CORD<%= PASSAGGI %>" ID="R3CORD<%= PASSAGGI %>"


così dovrebbe andare.
Modificato da BrightSoul il 20 settembre 2013 23.05 -

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.