Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Possibile?! OPTION SELECTED in base al value NON NUMERICO

    Ciao a tutti.

    Ho una select molto lunga, con tutti i paesi del mondo come value.
    ll formato è quindi questo:

    codice:
    <select name='paese'>
    <option value='Albania'>Albania</option>
    <option value='Andorra'>Andorra</option>
    ....
    </select>
    Quando l'utente deve modificare il profilo vorrei che si selezionasse in automatico il paese scelto in fase di registrazione.
    Il paese scelto lo estraggo con PHP da un database MySQL, comunque in pratica ho il valore della stringa (ad esempio: Andorra).

    Ora, io so che usando:
    codice:
    document.mioform.paese.selectedIndex='02';
    posso selezionare la option con l'indice numero 2.

    Il problema è che devo selezionare quella con il value 'Andorra', non quella con un indice numerico.
    Come si fa?

    Nota: non posso inserire i numeri 01, 02... nei value perché per altri motivi nel database mi serve il nome del paese e non il numero associato.

    Chi è capace?

    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    Devi tener presente che document.nomeform.nomeselect.selectedIndex = indice;
    assegna l'attributo select all'opzione di indice 'indice' come se le opzioni facessero parte di un array. Nell'array gli indici non vanno da 1 a dimensione array ma da 0 a dimensione array-1.
    Quindi l'indice di 'Andorra' nell'esempio non sarebbe 2 ma 1.

    Di questa premessa la cosa più importante da considerare è che le option formano un array al quale si può accedere nel seguente modo:

    document.nomeform.nomeselect.options

    A questo punto basta scorrere l'array con un for e fermarsi quando si trova la option con il value cercato o in alternativa dopo aver terminato lo scorrimento di tutti gli elementi.

    Alla fine del ciclo for la variabile utilizzata come contatore sarà minore della lunghezza dell'array solo se avrà trovato una option con la value cercata.

    Codice PHP:
    <html>
    <
    body>

    <
    form name='mioform'>
        <
    select name='paese'>
            <
    option value='Albania'>Albania</option>
            <
    option value='Andorra'>Andorra</option>
        </
    select>
    </
    form>


    <
    script type="text/javascript">
    var 
    dacercare 'Andorra';
    var 
    sel =  document.mioform.paese
    var opzioni sel.options;

    for(
    x=0; (x<opzioni.length) && (opzioni[x].value!=dacercare); x++);

    if(
    opzioni.lengthsel.selectedIndex x;

    </script>


    </body>
    </html> 

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Fallo da php quando popoli la select inserisci un if(datodb=='Andorra'){echo "selected='selected'"}etc... non guardare la sintassi php non conosco il linguaggio e solo uno spunto, gestire la stessa operazione con js e molto + complesso
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    Siccome popoli la select sul lato server (con php?), quando giunge il nome del paese voluto ci aggiungi selected="selected".

    Tieni anche presente che popolare una select con il testo e il value identici è una ridondanza di dati: è perfettamente legittimo, ma siccome sia il testo che il value sono leggibili tramite javascript, tanto varrebbe usare la value per qualcos' altro - cmq questo è secondario.

    Molto più importante è che gli indici in javascript non sono 00, 01, 02 03 04 ma 0 1 2 3 4... (e senza apici: non ='02' ma =2)

    Se quindi lo vuoi fare dal lato client usando javascript, la opzione più comune (tralascio la ipotesi di fornire array associative per la localizzazione) è di effettuare un loop:

    codice:
    <form name='mioform'>
        <select name='paese'>
            <option value='Albania'>Albania</option>
            <option value='Andorra'>Andorra</option>
    	<option value='Italia'>Italia</option>
        </select>
    </form> 
    
    test
    
    <script>
    function foo(cercaQuesto){
    var f=document.forms['mioform']['paese'];
    for(var i=0; i<f.options.length; i++){
    alert(f.options[i].value+' ; '+f.options[i].text);//come reperire testo e value
    if(f.options[i].value.toLowerCase()==cercaQuesto.toLowerCase()){f.options[i].selected=true; break;}
    }
    }
    
    </script>
    ci ho messo un alert che puoi togliere. Nota che la ricerca avviene comparando i nomi dopo averli messi tutti in minuscolo - questo è opportuno perchè se disgraziatamente tu o l'utente cercate "andorra" ma il menu reca "Andorra" con la "A" maiuscola, non la troverebbe mai.

  5. #5
    Grazie a tutti, ho combinato le vostre risposte, l'intervento di TrueLies è stato molto specifico e combinandolo con PHP ho avuto modo di risolvere.

    Per gli indici era stata una svista, ho constatato che partono da 0.

    Mi rimane la curiosità di capire perchè formattare in lowercase, dettaglio che per ora ho rimosso.
    se disgraziatamente tu o l'utente cercate "andorra" ma il menu reca "Andorra" con la "A" maiuscola, non la troverebbe mai.
    Non capisco perché io o l'utente dovremmo cercare Andorra nella pagina.
    Anche perché essendo options, a meno che entri nel codice non posso cercar tali termini on the fly.
    Inoltre, essendo un sito in un'altra lingua, applicando questa teoria dovrei rimpiazzare tutti i caratteri accentati con lettere lowercase standard. Ma se poi l'utente cercasse la parola con l'accento o con la maiuscola iniziale? Dopotutto, Andorra va con la maiuscola, eheh.

    Beh direi che il problema è risolto e queste rimangono simpatiche curiosità.

    Ciao
    Ogni notte muoio

  6. #6
    Allora diciamo che più che l'utente, potrebbe essere uno script a cercarla come tale. E' vero che tu dovresti avere il pieno controllo sull' ambiente di sviluppo, ma io non conosco tale ambiente nei dettagli - magari ci lavorano a più mani, o magari domani ci lavora qualcun altro. Rendendo il confronto case insensitive, ci si cautela rispetto ad assunzioni (o sviste) fatte da successivi interventi di scripting. Tutto lì :-)

    Considerala un po' una specie di prassi di "normalizzazione" o "astrazione" del dato: tu oggi assumi vada bene così, domani succede qualcosa e scopri non va più bene - un esempio sono i database, i nomi dei campi possono essere case insensitive, poi un giorno l' amministratore trasmigra i server e il nuovo server è case sensitive e i tuoi script non vanno per giornate intere, finchè o non cambi i nomi ai campi o non segnali al db che deve essere case insensitive.
    Insomma, banale prudenza - della quale puoi anche fare a meno se sei ragionevolmente sicuro della padronanza sull' ambiente.

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.