特定の入力テキスト要素の「貼り付け」イベントを基本的にリッスンするJavaScriptがいくつかありました。このイベント バインディングは jQuery 経由で行いました。さて、以前のバージョンの IE では、問題なく機能していました。
しかし、IE11 にアップグレードすると、動作が異なります。
シナリオ: CR と LF で区切られた複数のキーワード (スプレッドシートの複数行) をコピーして貼り付けています。JavaScript では、「貼り付け」イベント ハンドラー内で、クリップボード データを読み取り、すべての CR/LF 文字を 1 つのコンマに変換し、この変換されたデータ文字列をクリップボードに戻します。繰り返しますが、これは以前のバージョンの IE ではうまく機能していました。
IE11 での動作は次のとおりです。貼り付けると、「貼り付け」イベント ハンドラーが呼び出され、前述のすべてが実行されます。残念ながら、input 要素に貼り付けられた結果は、まだ正しくフォーマットされていません。その後の貼り付けでは、正しいコンマ区切りの文字列が表示されます (ハンドラーで最後に行うことは、変換された文字列をクリップボードに設定するためです)。
質問: この貼り付けイベント ハンドラーの処理が間違っていますか? ここでも、貼り付けイベントを処理し、クリップボード データを変換してから、変換されたデータをクリップボードに戻します。以前の IE バージョンでは、これは最初の貼り付けで機能しました。しかし、IE11 では、変換されたデータ文字列は、最初の貼り付けの後、任意の貼り付けイベントに貼り付けられます。
関数は次のとおりです。
$("input").bind("paste", function (e) {
// for multi rows of spreadsheet data.
// format so that new line & carriage return are converted into a comma.
var rawText = window.clipboardData.getData("text");
var delimitedText = rawText.replace(/\r\n/g, ', ');
window.clipboardData.setData("text", delimitedText); // this is why subsequent pasting works fine.
});
とても有難い。