Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585

    Condizione if su valore array

    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[i].text;
    newElem.value = db[i].value;
    Iss_Chooser.add(newElem, where);
    if ((choice == "email1") && (db[i].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>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    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[i].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" ???

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    Non credevo che fosse cosi' difficile usare gli array:

    mi aspettavo che fosse semplice dire:
    se il valore selezionato nel secondo menu' e' "Free Text", fai un' azione ... invece vedo che e' complesso ...

    Ho fatto ora altri tentativi:

    if ((choice == "email1") && (db[db.selectedIndex].value=="Free Text" )) { action1; }
    else { action2;}
    }

    if ((choice == "email1") && (db.options[db.selectedIndex].value=="Free Text" )) { action1; }
    else { action2;}
    }

    if ((choice == "email1") && (db[i].selectedIndex==2 )) { action1; }
    else { action2;}
    }

    if ((choice == "email1") && (document.getElementById("iss_sum").options[document.getElementById("iss_sum").selectedIndex].value=="Free Text" )) { action1; }
    else { action2;}
    }
    if ((choice == "email1") && (document.getElementById("iss_sum").options[i].value=="Free Text" )) { action1; }
    else { action2;}
    }



    l' action va sempre bene, il problema e' la condizione che non ha la sintassi esatta ...

    Se qualcuno ha dimistichezza con gli array si faccia avanti

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    A mio avviso qui non si tratta di array o sintassi, ma più di conoscere il javascript e come funziona, da una lettura veloce ho qualche dubbio, posta un link alla demo pubblica cosi da ricreare il problema, e spiega perché non puoi creare le option direttamente nel oggetto, ma le devi creare in js.


    P.S. I tentativi forse è meglio applicarli al superenalotto + che al javascript, e a proposito di questo vado a giocare
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    Ciao Andrea,
    innanzitutto Grazie davvero di aver visto il mio problema ...


    E' sicuro che il javascript non lo conosco a fondo altrimenti non mi sarei imbattuto in uno stop lavorativo ...
    i tentativi che ho fatto era per facilitare chi leggeva il mio topic su dove risiede la condizione "incriminata" ...

    Secondo te e' meglio ripostare il problema creandone uno nuovo ??
    In fin dei conti le cose da scrivere sono le stesse per me ...

    Ho 2 menu' legati tra loro:
    volevo solo eseguire un' action quando l' utente seleziona "email1" dal primo menu' e "Free Text" dal secondo menu' ... tutto qui (a livello di parole)

    per la sintassi, la funzione e' quella di inizio topic ...

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Cosa intendi tu per action?
    E continuo a non capire si può creare gli elementi/oggetti direttamente nel form o devono essere creati obbligatoriamente dinamicamente in js, e in tal caso perché?
    Esempio potrebbe andare bene due radio che visualizzano due div nascosti che contengono x elementi diversi in base alla scelta fatta?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    Per action intendo anche un semplice alert("testo");

    L' approccio che seguo nel risolvere il problema non deve essere obbligatoriamente unico,
    lo seguo avvalendomi di cio' che la funzione setIssue(chooser) offre ...

    Su un esempio normale di 2 menu' tra loro collegati, senza label e textarea da richiamare,
    tale funzione "funziona" davvero bene ...

    Cmq qualsiasi altro suggerimento va bene ... se non ci si riesce in questo modo trovero' un modo piu' infelice (tipo far apparire sempre la textarea) per andare avanti; a me personalmente pero' sarebbe piaciuto di piu' risolvere il problema in una maniera lineare cosi' come l' avevo approcciata ...

    Anche perche', per mia curiosita' personale, mi sarebbe piaciuto conoscere il codice per dire: scelgo un' opzione del secondo menu' che e' un array .. bene ... solo se scelgo quella opzione il programma esegue un alert, un document.write, ecc...

    Ho guardato tanto in questi giorni in internet per risolvere il problema: ho masticato tanta sintassi e se avessi trovato la soluzione l' avrei sicuramente postata in modo da renderla utile agli altri .. .e' per questo che scrivo qui perche' so di trovare persone molto brave che magari mi risolvono il problema cambiando un pochino il codice ... cerco di dare il meglio ma l' informatica e' un mondo talmente vasto ed il tempo purtroppo a volte e' limitato

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    Quello che cerco e' questo:

    qual 'e' la sintassi in javascript per dire,
    dato l' array che ho chiamato sum_db,

    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 "}];

    come si evince dal topic di partenza:

    if sum_db["email1"] che SELEZIONO e' == "Free Text" ALLORA alert ....

    voglio dire:
    selezionato email1 dal primo menu',
    se il valore dell' array sum_db e' "Free Text" allora ..alert ...

  9. #9
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Prova a leggere qui
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    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[i].text;
    newElem.value = db[i].value;
    Iss_Chooser.add(newElem, where);
    if ((choice == "email1") { alert db[i].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[i] 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[i].text;
    newElem.value = db[i].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>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.