0

キーを長時間押したときに1文字だけを表示する方法はありますかつまり、「s」を長時間押したときに s」だけを表示したいのですが、これが起こらないようにしてください'ssssssssssssssssssssssssssssssssssssss....'。

また、この方法を使用すると、ユーザーがすばやく入力して2つのキーを同時に押すと、たとえば「k」を押して「k」を押したままにすると、2番目のキーだけが表示されるという問題が発生します。 'go'p'のみ'p'が表示されます。

var textarea='';

document.getElementById('textareaID').onkeydown=keydown;
document.getElementById('textareaID').onkeyup=keyup;

function keydown () {

this.value=textarea;

}

function keyup () {
textarea=this.value;
this.value=textarea;

}

そして、なんらかの理由で機能しないので、カウンターを使用するとは言わないでください。私が過去3日間試したと信じています。

http://toki-woki.net/lab/long-press/これは私が基本的にやろうとしていることですが、キーを押したまま1つだけが表示される部分がどのように行われるのか、そしてもちろんキーを押して、キーが押されている間に別のキーを押すと、両方が表示されます。残りは簡単です。

だから私はそれが私を夢中にさせていることを愛し、説明したいと思います。

4

2 に答える 2

5

了解しました。わかりました。

1:キーダウン時に、テキストエリアへの入力をキャンセルします。

2:キーアップ時にクリックした文字を入力します。

document.getElementById('textareaID').onkeydown=keydown;
document.getElementById('textareaID').onkeyup=keyup;

// keydown is run more than once if held down hence "ssssssss"
function keydown (event) {
    // cancel input
}
// since the keyup event is only fired once we will do most of the work here
function keyup (event) {
    // insert input
}

コードは次のとおりです(何が起こっているかを確認できるようにコメントがあります):http: //jsfiddle.net/NerfAnarchist/gXVuC/

于 2012-12-13T21:43:54.660 に答える
1

コメント投稿者PAが指摘したように、これはテキストボックスまたはテキストエリアのネイティブな動作を変更するのは悪い習慣だと思います。これを行う前に、他のオプションを参照してください。

...しかし、あなたがそれをしなければならない場合:

イベントを使用して、イベントの後にイベントkeyDownが続くことを条件に、イベントを通過させることができますkeyUp。次のコードは、このフィドルに基づいています。

​document.getElementById('box').addEventListener('keydown', function(event){
    // Superglobal window.characterPrinted to detect if the event has already fired.
    if(window.characterPrinted != true){
        window.characterPrinted = true;
        this.value += String.fromCharCode(event.keyCode);
        event.preventDefault();
    }
})​​​​​​​​;

document.getElementById('box').addEventListener('keyup', function(event){
    // Reset superglobal
    window.characterPrinted = false;
});

このコードはaddEventListenerandpreventDefaultを使用していることに注意してください。これは、古いブラウザでの動作が保証されていません。さまざまな方法を使用してイベントをバインドする必要があります。(私はあなたを見ています、IE7)。

別の注意:このコードはに追加されtextareaます。したがって、deleteキーが押された場合、それは何もしない、を追加しようとしますdelete。Michaelが提案したように、フィルタリングを実行しevent.keyCodeて、それ自体をいじる前にそれが文字であるかどうかを確認できます。event

于 2012-12-13T21:53:42.510 に答える