2011-04-14 4 views
8

私はHTML5要素をいくつか使いこなしています。これはChromeでのみ機能します。数字入力スクロールのHTML5イベントリスナー - Chromeのみ

数値の入力タイプを使用すると、最小、最大、およびステップを設定し、上下の矢印を使用して入力を制御できます。 <input type="number" min="0" max="100" step="5" />

クリックイベントリスナーをバインドすると、矢印が押されていることがわかりました。フィールドがぼやけてしまうまで、実際には変更は行われません。キーボードの上下矢印キーを使用して範囲内の値を変更することもできます。キー入力バインドでこれらの値を取得できます。

しかし、Chromeでは、マウスホイールを使用して入力を移動し、入力を移動してスクロールすることもできます。しかし、私はこのイベントを聞く方法を見つけることができませんでした。

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'); 
}); 

そのスクロールの変更をリッスンする方法上の任意のアイデアは?繰り返しますが、これはこの執筆時点でChromeでのみ機能します。

+1

あなたの質問への答えではないが、あなたはまた、イベントハンドラのすべてを置き換える、setTimeoutをループで値への変更を追跡することを検討してください。優れたパフォーマンスは得られませんが、どの入力方法でも動作します。 –

+0

それは完全に機能します。ピントを合わせてタイマーを始めるだけで、ぼかしでそれを殺すこともできます。このようなエッジケースでは、私は生産時にそれについて心配するつもりはありませんが、私は理論的価値に興味がありました。 – hookedonwinter

+1

FWIW - 数字入力フィールドをスクロールするか、インクリメントボタンをクリックすると、クロムが変更イベントを発生させるように見えます。 –

答えて

8

jQuery Mouse Wheelプラグインがこのトリックを行うようです。 http://plugins.jquery.com/project/mousewheel

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

[そのプラグインでOPのjsFiddleをフォークしました](http://jsfiddle.net/V9Uck/)、あなたのソリューションを示しています – ExtraGravy

+2

これはスクロールするのには奇妙なことです... – hookedonwinter

+2

jQueryはそれをボックスの外でサポートしていません。機能が不足するたびにプラグインをインポートしたくない場合、バニラリスナー '$( '#test')[0] .addEventListener( 'mousewheel'、function(){ $( ' after '('
scroll '); }); ' – zeachco

関連する問題