1

テキストボックスに数値があります。今私が欲しいのは、矢印キーのいずれかを押したまま、その数値を増やし続けることです。一度だけ押すと、これを行う方法を知っています。1だけ増加します。しかし、矢印キーを押している間、値を増やし続けたい場合はどうなりますか。どうやってするか?

ありがとう

4

5 に答える 5

2

これを行うための小さな jQuery プラグインがあります: https://github.com/nakupanda/number-updown

用途:

$('#simplest').updown();

$('#step').updown({ ステップ: 10, shiftStep: 100 });

$('#minMax').updown({ 最小: -10, 最大: 10 });

$('#minMaxCircle').updown({ 最小: -10、最大: 10、円: true });

ここでライブデモを見る: http://jsfiddle.net/XCtaH/embedded/result/

キーボードおよびマウスホイール イベントのサポート

于 2013-04-05T02:35:12.770 に答える
1

これは私が完全に試してテストしたわけではありませんが、ここに考えがあります-キーが最初に押されたときにOSによってキューに入れられるイベントであるため、KeyDownイベントを追跡することをお勧めします。このようにインクリメントするときに何らかの遅延を実装して、クライアント側のスクリプトを圧倒したり、ユーザーが追跡できるように高速に数値を変更したりしないようにすることもできます。

于 2010-10-07T00:15:47.957 に答える
0

ここでいくつかのテストを行った後、その方法は次のとおりです。

var setTimeoutId; 
var keyIs = "up"; 

 function myIncrementFunction()
    {
            var num = parseFloat(myText.value)+1;
            myText.value = num; 

    }

myText.onkeydown = function(e)
    {
    keyIs = "down";

    if(keyIs == "down")
        {
            var e = e || event ;
            if (e.keyCode == 38)
                {    
                    for(var s=0; s<1; s++)
                        setTimeoutId = setTimeout('myIncrementFunction()',100); 
                }
        }
    }

myText.onkeyup = function(e)
{ 
    keyIs = "up"; 
}
于 2010-10-07T02:28:59.213 に答える
0

Opera のサポートに関心がない場合、これは簡単です。

textbox.onkeydown = function(e)
{
    if (e.keyCode == 38)
    {
        incrementTextBox();
    }
}

ただし、Opera はキーの繰り返しでは発火しませんkeydown...incrementTextBox()間隔を置いて呼び出し、キーが離されたときに停止することで、それを模倣する必要があります。これを WebKit (Chrome 6.0)、FF3、Opera 10.6、IE7、IE8、IE9、さらには IE Quirks でテストしました。

var textbox = null;
window.onload = function()
{
    var timeoutId = null;
    var intervalId = null;
    var incrementRepeatStarted = false;
    function startIncrementKeyRepeat()
    {
        timeoutId = window.setTimeout(function()
        {
            intervalId = window.setInterval(incrementTextBox, 50);
        }, 300);
    }
    function abortIncrementKeyRepeat()
    {
        window.clearTimeout(timeoutId);
        window.clearInterval(intervalId);
        timeoutId = null;
        intervalId = null;
    }
    function endIncrementKeyRepeat()
    {
        abortIncrementKeyRepeat();
        incrementRepeatStarted = false;
    }
    textbox = document.getElementById("incrementer");
    textbox.onkeydown = function(e)
    {
        e = e || window.event;
        if (e.keyCode == 38)
        {
            if (!incrementRepeatStarted)
            {
                startIncrementKeyRepeat();
                incrementRepeatStarted = true;
            }
            else if (timeoutId || intervalId)
            {
                abortIncrementKeyRepeat();
            }
            incrementTextBox();
        }
        else if (incrementRepeatStarted)
        {
            endIncrementKeyRepeat();
        }
    }
    textbox.onkeyup = endIncrementKeyRepeat;
}
function incrementTextBox()
{
    var val = parseInt(textbox.value) || 0;
    val++;
    textbox.value = val;
}
于 2010-10-07T00:18:05.180 に答える
0

これをやりたかったのですが、type="number" の入力フィールドを使用しました

于 2022-01-27T10:16:02.043 に答える