2010-10-08 8 views
5

Desidero portare alcune informazioni nascoste aggiuntive (ad esempio: codice postale) in un elenco a discesa di selezione/opzione HTML e renderlo disponibile a una funzione javascript quando modifiche utente selezione della casella di opzione.portare alcune informazioni extra in un elenco a discesa di selezione/opzione HTML

Questo è il tipo di cosa che vorrei fare (ma non funziona).

<select id="sel_activity" onchange="selectionChange(this.info)"> 
    <option info=""  value="CAR">CAR PROBLEM</option> 
    <option info=""  value="COFFEE">Coffee Break</option> 
    <option info="45678" value="INV">INVENTORY COUNT</option> 
    <option info="23567" value="INVDROP">Inventory</option> 
    <option info="" value="LUNCH">Lunch Break</option> 
    <option info="87654" value="MEET">Meeting</option> 
</select> 

. 
. 
. 

function selectionChange(info){  
    alert(info); 
} 
+1

Credo che il problema è che in SelectionChange (this.info), "questo" si riferisce alla "selezionare ", piuttosto che" opzione ". È necessario ottenere l'opzione selezionata e quindi recuperare le informazioni. Ecco un link ad alcune informazioni: http://www.javascriptkit.com/jsref/select.shtml – Andrew

+2

Sei preoccupato che il tuo codice sia valido o no? Altrimenti, basta creare attributi per tutto. – ScottE

risposta

5

HTML 5 fornisce gli attributi data- *, è possibile definire i propri attributi semplicemente prefisso con dati-. Come data-info, data-zip o altro.

+2

Grazie, ma forse tra un anno o due ... non chiedermi quali browser usano i miei utenti .. :( – robert

+1

Non è proprio per questo, ma potresti usare l'attributo class, dovrebbe essere supportato sui tag di opzione. – Maxem

+1

@robert: Dal momento che stai già utilizzando un attributo non standard "' info' ", potresti anche renderlo conforme a HTML5. JS su questo funzionerà ancora, ed è un'opzione migliore che abusare dell'attributo class. – You

3

onchange="selectionChange(this.options.item(this.selectedIndex).getAttribute('info'))"

0

Il metodo più semplice sarà quello di avere un allineamento parallelo e dato il valore della selezione, sarà trovare il valore della matrice per rivelare il valore informazioni aggiuntive che si desidera.

Un'altra opzione è quella di chiamare un servizio web per cercare informazioni dato il valore se non è un peso inutile per il vostro tipo di progetto

-1

class e id sono buoni attributi da utilizzare per questo tipo di memorizzazione delle informazioni. Una cosa da tenere a mente è che, con gli standard W3C, id non può iniziare con un numero, quindi se speri di memorizzare numeri come informazioni extra dovrai usare class o implementare qualche Javascript in più che estrae il numero da id, come una funzione substr.

+2

-1. 'class' e' id' non sono destinati all'archiviazione delle informazioni. – You

+0

Di solito, no, ma è un buon trucco da usare fino a quando HTML5 diventa mainstream –

+0

MAI. Gli attributi "data-" sono usati per quello. –

5

userei JQuery per ottenere il valore dell'attributo, utilizza questa funzione:

attr(attributeName) 

qualcosa di simile:

 $("select").change(function() { 

      $("select option:selected").each(function() { 
       var info = $(this).attr("info"); 
       alert(info); 
       }); 

     }) 
     .trigger('change'); 

ed è possibile impostare il valore di attributo con la stessa funzione:

attr(attributeName, value) 

check the API

2

Poiché gli utenti utilizzano i vecchi browser, una stringa delimitata da una pipe o un carattere potrebbe funzionare.

Come ...

<select id="sel_activity" onchange="selectionChange(this)"> 
    <option value="|CAR">CAR PROBLEM</option> 
    <option value="|COFFEE">Coffee Break</option> 
    <option value="45678|INV">INVENTORY COUNT</option> 
    <option value="23567|INVDROP">Inventory</option> 
    <option value="|LUNCH">Lunch Break</option> 
    <option value="87654|MEET">Meeting</option> 
</select> 

Con JavaScript standard ...

function selectionChange(o) { 
    // an alternative ...  
    var values = o.options[o.options.selectedIndex].value.split("|");    
    alert("Selected Index? "+(o.options.selectedIndex+1) 
    +"\nInfo? "+values[0] 
    +"\nValue? "+values[1]); 
    values = null; 
    } 
Problemi correlati