2011-04-14 6 views
8

Używam elementów HTML5 i mam fajne zachowanie. Działa to tylko w Chrome.Urządzenie do odbierania zdarzeń HTML5 do przewijania wprowadzania liczb - tylko Chrome

Za pomocą typu wprowadzania numeru można ustawić min, maksimum i krok oraz uzyskać strzałki w górę iw dół, aby kontrolować dane wejściowe. <input type="number" min="0" max="100" step="5" />

Stwierdziłem, że powiązanie detektora zdarzeń kliknięcia przechwytuje naciśnięcia strzałek, ponieważ zmiana nie nastąpi, dopóki pole nie będzie rozmyte. Możesz także użyć klawiszy strzałek w górę iw dół na klawiaturze, aby zmienić wartość w granicach, a powiązanie z naciśnięciem klawisza może je wybrać.

W Chrome można jednak również użyć kółka myszy do zmiany wejścia, najeżdżając kursorem na dane wejściowe i przewijanie. Nie udało mi się jednak znaleźć sposobu, aby posłuchać tego wydarzenia.

Example on jsfiddle

HTML:

<input type="number" min="0" max="100" step="5" id="test" /> 

JavaScript (jQuery):

$('#test').click(function(){ 
    $(this).after('<br />click'); 
}); 

$('#test').change(function(){ 
    $(this).after('<br />change'); 
}); 

$('#test').keypress(function(){ 
    $(this).after('<br />keypress'); 
}); 

Wszelkie pomysły jak słuchać tej zmiany przewijania? Znowu działa to tylko w Chrome od tego pisania.

+1

Chociaż nie jest to odpowiedź na twoje pytanie, możesz również rozważyć śledzenie zmian wartości z pętli setTimeout, zastępując wszystkie obsługi zdarzeń. Nie świetna wydajność, ale działa z dowolną metodą wprowadzania. –

+0

To by całkowicie działało. Nawet po prostu uruchom timer na fokus i zabij go przy rozmyciu. Tak poważny przypadek, że nie będę się tym martwić o produkcję, ale byłem ciekawy teoretycznej wartości. – hookedonwinter

+1

FWIW - wygląda na to, że chrome uruchamia teraz zdarzenie zmiany po przewinięciu pola wprowadzania liczb lub kliknięciu przycisków zwiększania wartości. –

Odpowiedz

8

Wtyczka jQuery Mouse Wheel wydaje się działać. http://plugins.jquery.com/project/mousewheel

$('#test').mousewheel(function(){ 
    $(this).after('<br />mouse wheel'); 
}); 
+3

[Rozwinąłem jsFiddle programu OP za pomocą tej wtyczki] (http://jsfiddle.net/V9Uck/), pokazując rozwiązanie – ExtraGravy

+2

Dziwnie satysfakcjonujące jest przewijanie z tym ... – hookedonwinter

+2

, podczas gdy jQuery nie obsługuje go po wyjęciu z pudełka i jeśli nie chcesz importować wtyczki za każdym razem, gdy brakuje funkcji, możesz po prostu użyć wanilowego detektora '$ ('# test') [0] .addEventListener ('mousewheel', function() { $ ('# test '). after ('
scroll '); }); ' – zeachco

Powiązane problemy