4

誰かがテキストフィールドのバックスペースキーをシミュレートするための良い例を提供できますか?<INPUT>

HTML5で実行される仮想キーボードにこれが必要であり、Webkitブラウザーでのみ機能する必要があります。

ノート:

  • createEvent//文字コード8(バックスペース)は無視されます(これは印刷可能な文字に対してのみ機能するようですinitTextEventdispatchEvent
  • valueある種の作業を使用して手動で変更しsubstr()ますが、この方法では、カレットが入力フィールドの最後に移動します(通常のキーボードを使用する場合と同じように、入力フィールドの中央にある文字を削除できるようにします)。
4

2 に答える 2

4

了解しました:http ://jsfiddle.net/dan_barzilay/WWAh7/2/

さらに説明的なコメントが必要な場合は、getcaret関数を使用して文字を削除する場所を確認します。カーソルリセット機能は、バックスペース後にキャレット位置を復元するために使用されます。

** jqueryを使用していますが、秒単位で通常のjsに変更できます

于 2012-08-20T15:47:36.177 に答える
2

編集:以下は複雑すぎて使用できません。https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommandによると 、を呼び出すだけで十分document.execCommand("delete");です。

setSelectionRangeこれがChromeでうまく機能する を使用した私の解決策です: https ://github.com/gdh1995/vimium-plus/blob/master/lib/dom_utils.js#L169

simulateBackspace: function(element) {
    var start = element.selectionStart, end = element.selectionEnd, event;

    if (!element.setRangeText) { return; }
    if (start >= end) {
      if (start <= 0 || !element.setSelectionRange) { return; }
      element.setSelectionRange(start - 1, start);
    }

    element.setRangeText("");
    event = document.createEvent("HTMLEvents");
    event.initEvent("input", true, false);
    element.dispatchEvent(event);
}

まあ、唯一の不足は、それが行った変更を元に戻すことができないということです。

追加:元に戻すとやり直しを有効にする方法を見つけました:Javascript textarea undo redoで、両方の回答がChromeでうまく機能します

于 2016-01-14T12:57:03.113 に答える