2013-04-11 14 views
5

Sto cercando di trovare un modo per eseguire una funzione JavaScript quando un utente seleziona un'opzione in una casella HTML select, indipendentemente dal fatto che questa opzione sia già stata selezionata. Quindi onchange è fuori questione.Alternativa a onblur/onchange in select

Il problema con l'utilizzo di onblur è che (in Chrome e Safari, almeno) l'evento non viene attivato finché l'utente non fa clic su un altro elemento. Ciò può anche risultare fastidioso se l'utente si concentra sulla selezione, quindi fa clic di scatto senza scegliere un'opzione, nel qual caso non voglio che l'evento venga attivato.

Sono riuscito a ottenere un certo successo assegnando a ciascuna opzione un gestore onmouseup, ma questo funziona solo in Firefox, per quanto ne so. Qualche idea?

+0

fa ' onclick' lavoro? – Barmar

+0

@Barmar - No. Immagino che solo Firefox supporti gli eventi click per gli elementi 'option'. Citerò, tuttavia, che non ho testato nulla di tutto questo in IE. –

+1

Una brutta soluzione sarebbe quella di rendere 'selectedIndex = -1' ogni volta che' onfocus', così puoi tranquillamente ascoltare 'onchange'. Ciò sarebbe fastidioso per gli utenti di tastiera, ma se si presume che i propri clienti non si preoccupino di ciò che hanno precedentemente selezionato, questo potrebbe valere un test. – Passerby

risposta

2

Dal momento che nessuno si è preso la briga di rispondere a questa, vi posterò una versione generica del mio codice:

<select id="mySelect" onfocus="this.selectedIndex=0;" onchange="userDidSomething(event)"> 
    <option>Choose one:</option> 
    <option>Option 1</option> 
    <option>Option 2</option> 
</select> 

La JavaScript:

function userDidSomething(event) { 
    // Your Code Here. 
} 
+0

Ciò interromperà il caricamento del browser se javascript non è attivo. Penserei che potresti usare onChange in questo modo: '' 'var s = document.getElementById (" mySelect "); s.attachEvent ("onchange", function() { // function here }); '' ' –

1

Provare a utilizzare

var s = document.getElementById("mySelect"); 
s.attachEvent("onchange", function() { 
    // function here 
}); 
+3

Ha detto che non vuole" onchange' –

+0

Le mie scuse. L'ascoltatore di eventi non è una possibilità? Probabilmente no se il problema è un vecchio Internet Explorer. – jonlastthelast