2013-04-11 14 views
5

Próbuję znaleźć sposób na uruchomienie funkcji JavaScript, gdy użytkownik wybierze opcję w polu HTML select, niezależnie od tego, czy ta opcja była już wybrana. Tak więc onchange jest wykluczone.Alternatywa dla onblur/onchange w wyborze

Problem z używaniem onblur polega na tym, że (przynajmniej w przeglądarce Chrome i Safari) zdarzenie nie jest uruchamiane, dopóki użytkownik nie kliknie innego elementu. Może to również okazać się irytujące, jeśli użytkownik skupi się na selekcji, a następnie kliknie bez wybierania opcji, w którym to przypadku nie chcę, aby zdarzenie zostało wyzwolone.

Udało mi się osiągnąć sukces, nadając każdej z opcji obsługę onmouseup, ale działa to tylko w Firefoksie, o ile wiem. Jakieś pomysły?

+0

Does ' onclick' działa? – Barmar

+0

@Barmar - Nie. Przypuszczam, że tylko Firefox obsługuje zdarzenia klikania dla elementów 'option'. Wspomnę jednak, że nie przetestowałem tego w IE. –

+1

Brzydkim rozwiązaniem byłoby utworzenie 'selectedIndex = -1' za każdym razem, gdy' onfocus', dzięki czemu można bezpiecznie słuchać 'onchange'. Byłoby to denerwujące dla użytkowników klawiatury, ale jeśli założysz, że twoi klienci nie dbają o to, co wcześniej wybierali, może to być warte testu. – Passerby

Odpowiedz

2

Ponieważ nikt nie przeszkadza, aby odpowiedzieć na to pytanie, będę dodawać rodzajowe wersję mojego kodu:

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

javascript:

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

Spowoduje to zatrzymanie ładowania przeglądarki, jeśli javascript nie jest włączony. Sądzę, że możesz użyć tego polecenia na Zmień: '' 'var s = document.getElementById (" mySelect "); s.attachEvent ("onchange", function() { // funkcja tutaj }); '' ' –

1

Spróbuj użyć

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

Powiedział, że nie chce" zamieniać " –

+0

Moje przeprosiny. Czy słuchacz wydarzeń nie jest możliwy? Prawdopodobnie nie, jeśli problem jest stary Internet Explorer. – jonlastthelast