Condizione if su valore array

il_betto

Utente Attivo
23 Mar 2007
42
0
0
Ciao a Tutti,
mi spiace non venire a capo di una condizione if che mi fa un po' arrabbiare ...

Ho 2 menu' a tendina correlati,
vorrei che SOLO quando uno seleziona email1 nel primo menu',
e SOLO quando sceglie l' opzione "Free Text",
compaia a fianco del secondo menu' a tendina la label "Description" con relativa textarea

Adesso, quando uno sceglie email1,
per qualsiasi opzione del secondo menu' che sceglie, compare sempre la textarea ...
come mai ???

Grazie come sempre in anticipo !!!


<head>
<Script Language="JavaScript">
var sum_db = new Object()
sum_db["email1"] = [{value:"I01 - Problemi di primo livello", text:"I01 - Problemi di primo livello"},
{value:"I02 - Problemi RDM", text:"I02 - Problemi RDM"},
{value:"Free Text", text:"Free Text "}];
sum_db["email2"] = [{value:"I03 - Varie", text:"I03 - Varie"}];
//
//
function setIssue(chooser) {
var newElem;
var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
var Iss_Chooser = chooser.form.elements["iss_sum"];
while (Iss_Chooser.options.length) {
Iss_Chooser.remove(0);
}
var choice = chooser.options[chooser.selectedIndex].value;
var db = sum_db[choice];
if (choice == "email1") {
newElem = document.createElement("option");
newElem.text = "Choose an issue ...";
newElem.value = "Choose Issue ...";
Iss_Chooser.add(newElem, where);
}
for (var i = 0; i < db.length; i++) {
newElem = document.createElement("option");
newElem.text = db.text;
newElem.value = db.value;
Iss_Chooser.add(newElem, where);
if ((choice == "email1") && (db.text.indexOf('Free Text')==0)) { document.getElementById("label_des").style.display=""; }
else { document.getElementById("label_des").style.display="none"; }
}
}
//
</script>
</head>


<body>
<form>
<select size="1" name="mess" id="mess" onchange="setIssue(this)">
<option value="email1" selected>email1</option>
<option value="email2">email2</option>
</select>
....
....
<select id="iss_sum" name="iss_sum">
<option value="<%=objRS("Issue_Summary")%>" selected><%=objRS("Issue_Summary")%></option>
</select> <label for="iss_des" id="label_des" style="display:none; vertical-align:top">Description:<textarea id="iss_des" name="iss_des"><%=objRS("Issue_Description")%></textarea>
</label>
 
Il mio problema e':

come dire che, solo se uno ha selezionato email1, e seleziona solo la voce del secondo menu' "Free Text" allora compare la textare con la label Description ...

Per ora ho provato cosi' senza risultato:

if ((choice == "email1") && (db.selected=='Free Text' )) { document.getElementById("label_des").style.display=""; }
else { document.getElementById("label_des").style.display="none"; }
}


E' questa condizione che non va bene .. .come dire .. se scelgo solo quest' opzione del menu' contenente "Free Text" ???
 
Problema risolto !!!

Ho provato a mettere un alert all' interno del cliclo if e del ciclo for per vedere quale valore di variabile mi ritornava, in questo modo:

for (var i = 0; i < db.length; i++) {
newElem = document.createElement("option");
newElem.text = db.text;
newElem.value = db.value;
Iss_Chooser.add(newElem, where);
if ((choice == "email1") { alert db.value; }
}
alert (newElem.value); e poi alert sul valore di Iss_Chooser
}

Ho capito che nel mio modo, all' interno della funzione setIssue(chooser), non ci sarei mai riuscito perche' non potevo fare un confronto tra db e un valore "Free Text" del secondo menu' che dovevo ancora selezionare ...

Cosi', attraverso l' alert, che mi ritornava un valore vuoto di variabile,
ho capito quello che forse mi si voleva dire prima, ma che purtroppo non ero in grado di recepire:

Ho definito cosi' nella head una nuova funzione

function setLabel() {
if (document.forms[0].iss_sum.options[document.FrontPage_Form1.iss_sum.selectedIndex].text.match(/^Free/)) {
document.getElementById("label_des").style.display=""; }
else { document.getElementById("label_des").style.display="none"; }
}

che ho richiamato dalla seconda select menu

<select id="iss_sum" name="iss_sum" onchange="setLabel()" >
<option value="<%=objRS("Issue_Summary")%>" selected><%=objRS("Issue_Summary")%></option>
</select> <label for="iss_des" id="label_des" style="display:none; font-weight: bold; vertical-align:top">Description:
<font face="Gill Sans MT">
<textarea id="iss_des" name="iss_des"><%=objRS("Issue_Description")%></textarea></font>
</label>

Ed il gioco e' fatto !! Era quello che volevo !!!

Sono felicissimo e cmq rimane sempre il fatto che, attraverso la collaborazione di tutti, le soluzioni si ottengono anche perche' unendo le varie idee si raggiungono alti risultati

Per riassumere il tutto, posto tutto il codice funzionante:

<head>
<Script Language="JavaScript">
var sum_db = new Object()
sum_db["email1"] = [{value:"I01 - Problemi di primo livello", text:"I01 - Problemi di primo livello"},
{value:"I02 - Problemi RDM", text:"I02 - Problemi RDM"},
{value:"Free Text", text:"Free Text "}];
sum_db["email2"] = [{value:"I03 - Varie", text:"I03 - Varie"}];
//
//
function setIssue(chooser) {
var newElem;
var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
var Iss_Chooser = chooser.form.elements["iss_sum"];
while (Iss_Chooser.options.length) {
Iss_Chooser.remove(0);
}
var choice = chooser.options[chooser.selectedIndex].value;
var db = sum_db[choice];
if (choice == "email1") {
newElem = document.createElement("option");
newElem.text = "Choose an issue ...";
newElem.value = "Choose Issue ...";
Iss_Chooser.add(newElem, where);
}
for (var i = 0; i < db.length; i++) {
newElem = document.createElement("option");
newElem.text = db.text;
newElem.value = db.value;
Iss_Chooser.add(newElem, where);
}
}
//
function setLabel() {
if (document.forms[0].iss_sum.options[document.FrontPage_Form1.iss_sum.selectedIndex].text.match(/^Free/)) {
document.getElementById("label_des").style.display=""; }
else { document.getElementById("label_des").style.display="none"; }
}
//
</script>
</head>


<body>
<form>
<select size="1" name="mess" id="mess" onchange="setIssue(this)">
<option value="email1" selected>email1</option>
<option value="email2">email2</option>
</select>
....
....
<select id="iss_sum" name="iss_sum" onchange="setLabel()">
<option value="<%=objRS("Issue_Summary")%>" selected><%=objRS("Issue_Summary")%></option>
</select> <label for="iss_des" id="label_des" style="display:none ; vertical-align:top">Description:<textarea id="iss_des" name="iss_des"><%=objRS("Issue_Description")%></textarea>
</label>
 

Discussioni simili