2011-09-26 19 views
26

Al momento mi sto usando questo:redirect su selezionare l'opzione nella casella di selezione

<select ONCHANGE="location = this.options[this.selectedIndex].value;"> 

mi reindirizzare sulla posizione interna del valore di opzione. Ma non funziona come previsto .. significa che se clicco sulla prima opzione della selezione, l'azione onChange non è in esecuzione. Stavo pensando a javascript, ma penso che avrai qualche suggerimento migliore ragazzi. Quindi, come posso farlo funzionare se faccio clic su ciascuna opzione che mi reindirizzerà al suo valore?

+0

JavaScript è già. (JavaScript in linea) – Nathan

+0

Ah, ok grazie per quello: p – Lucas

risposta

80

Poiché la prima opzione è già selezionata, l'evento di modifica non viene mai attivato. Aggiungi un valore vuoto come primo e controlla vuoto nell'assegnazione della posizione.

Ecco un esempio:

<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"> 
    <option value="">Select...</option> 
    <option value="http://google.com">Google</option> 
    <option value="http://yahoo.com">Yahoo</option> 
</select> 

Ed ecco il violino: http://jsfiddle.net/bL5sq/

+0

L'ho fatto, ma se l'utente spingerà il pulsante Indietro sul browser, allora potrà selezionare il valore 'vuoto', e la posizione dello script sarà interrotta. – Lucas

+0

@Lucas Quindi aggiungi l'attributo 'disabled' al valore" Seleziona ... "in modo che quando fai clic non accada nulla:' ' – Nathan

+2

@Tutti - Non ce n'è bisogno. Lo script sopra non si rompe !! –

17

avrei suggeriscono fortemente allontanandosi dalla linea JavaScript, per qualcosa come il seguente:

function redirect(goto){ 
    var conf = confirm("Are you sure you want to go elswhere?"); 
    if (conf && goto != '') { 
     window.location = goto; 
    } 
} 

var selectEl = document.getElementById('redirectSelect'); 

selectEl.onchange = function(){ 
    var goto = this.value; 
    redirect(goto); 

}; 

JS Fiddle demo (404 linkrot victim) .
JS Fiddle demo via Wayback Machine.
Forked JS Fiddle for current users.

del mark-up in JS Fiddle la prima opzione non ha valore assegnato, quindi clic su di esso non dovrebbe far scattare la funzione di fare qualsiasi cosa, e dal momento che è il valore di default cliccando sul select e selezionando quella prima di default option non attiverà comunque l'evento change.

Aggiornamento:
L'ultimo esempio di (2017-08-09) reindirizzare gli URL richiesto sostituendo a causa di errori per quanto riguarda il contenuto misto tra JS Fiddle ed entrambi i domini, così come entrambi i domini che richiedono 'sameorigin' per i contenuti incorniciata. - Albert

+2

Tre anni di ritardo, ma questa è la migliore risposta IMO. – Eckstein

+0

il tuo collegamento di violino dà un 404, buona risposta altrimenti; Manca l'HTML, anche se lo – Manube

+0

sarà in linea rispetto allo standard javascript per fare qualcosa di diverso per quanto riguarda la scansione di google? – splinter123

Problemi correlati