11

数日前、Internet Explorer でテキストを更新する方法に関する質問を投稿しました。どうやら、使用されている方法は Firefox でも機能しません。

これにより、テキストエリアの値を変更し、元に戻す/やり直しキューも更新する方法があるかどうかを考えさせられました(ctrl-Zまたはを呼び出すdocument.execCommand('undo');)

これまでのところ、2 つの可能性が見つかりましたが、すべてのブラウザーで機能するとは限りません。

オプション1:

var event = document.createEvent('TextEvent');
event.initTextEvent('textInput', true, true, null, text, 9, "en-US");
textarea.focus();
textarea[0].setSelectionRange(selection.start, selection.end);
textarea[0].dispatchEvent(event);

注: IE (まったく) と Firefox では動作しないようです

オプション 2 :

document.execCommand("insertText", false, "the text to insert");

IE では動作しません (9 でテスト済みですが、まったく実装されていないようです)。他のブラウザーについてはわかりません。

4

4 に答える 4

6

私がこれまでに思いついた解決策はこれですが、私はより良いアイデアを受け入れています:

document.queryCommandSupported を介して、insertText の存在を確認します。存在する場合は、それを使用します。そうでない場合は、単にテキストを置き換えます。

var text = "hello world",
    textarea = jQuery("textarea"),
    selection = {'start': textarea[0].selectionStart, 'end': textarea[0].selectionEnd};

if (document.queryCommandSupported('insertText')) {
    document.execCommand('insertText', false, text);
}
else {
    textarea.val(textarea.val().substring(0, selection.start) + text + textarea.val().substring(selection.end, textarea.val().length));
}
于 2013-11-06T14:18:08.577 に答える
0

サポートしているブラウザーのみがサポートdocument.execCommand("insertText")されていますundo(現時点では、Chrome、Safari、Opera)。他のブラウザにはテキストを挿入するさまざまな方法がありますが、サポートされていませんundo

insert-text-textareaを試して、このページのソリューションの一部をラップし、最新のブラウザーをサポートしてください。IE8+ のサポートが必要な場合は、insert-text-at-cursorパッケージを試してください。

于 2019-03-29T02:28:44.883 に答える
0

今日の時点で、最新のブラウザはすべて、オプション 1 の dispatchEvent をサポートしているようです。詳細はこちら:

http://help.dottoro.com/ljrinokx.php

于 2015-03-04T10:07:12.803 に答える