web-dev-qa-db-ja.com

テキストフィールドでバックスペースをトリガーする方法は?

私がこれを持っていると言う:

<textarea id="myarea">Hello</textarea>

おそらくtrigger()とキーコードを使用して、そのテキストエリアでバックスペースをトリガーするにはどうすればよいですか?バックスペースのコードは8です。そして私はこれを探していません:

$('#myarea').val( $("myarea").val().slice(0,-1) );

誰かが実際にキーボードの「バックスペース」キーを押すのをシミュレートする必要があります。ありがとう

14
odle

キーダウンイベントを作成できます。

var e = jQuery.Event("keydown", { keyCode: 20 });

次に、textareaでトリガーします。

$("#myarea").trigger( e );

更新:

さらに調査とテストを行った後、このソリューションは[〜#〜] not [〜#〜]をシミュレートしていないことに気付きましたnaturalHTML要素のkeypressイベント。このメソッドはkeydownイベントをトリガーするだけで、ユーザーが要素に入ってそのキーを押すことを複製しません。

ユーザーがそのテキストボックスにアクセスしてそのキーを押すことをシミュレートするには、 ディスパッチイベント を作成する必要があります。

ディスパッチイベントもグローバルにサポートされていません。最善の策は、キーダウンイベントをトリガーしてから、意図したとおりにテキスト領域を更新することです。

10
rkw

私はこれを見つけました:

http://forum.jquery.com/topic/simulating-keypress-events (回答番号2)。

このようなものが機能するか、少なくともあなたにアイデアを与えるはずです:

<div id="hola"></div>
$(function(){
    var press = jQuery.Event("keyup");
    press.ctrlKey = false;
    press.which = 40;

    $('#hola').keyup(function(e){
        alert(e.which);
    })
   .trigger(press); // Trigger the event
});

デモ: http://jsfiddle.net/qtPcF/1/

6
Jose Adrian

あなたすべきではありません jsで重要なイベントを強制しています。代わりに、文字の削除をシミュレートしてみてください。

const start = textarea.selectionStart - 1;
const value = textarea.value;
const newValue = value.substr(0, start) + a.substr(start);
textarea.value = newValue;

または、イベントだけが必要な場合は、イベントを強制するのではなく、ハンドラーを直接呼び出します。これはあまりにもハッキーです。

1
Gibolt