1

特定の入力テキスト要素の「貼り付け」イベントを基本的にリッスンする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.
});

とても有難い。

4

1 に答える 1