2016-03-22 22 views
0

私は、ユーザーの貼り付けデータを取り込み、操作してから、ユーザーのカーソルがあった場所に戻すスクリプトを作成しています。これは、ペーストデータがHTMLであり、ユーザーが貼り付ける場所がプレーンテキストのみを受け入れるtextareaである必要があるためです。Firefoxがテキスト領域にフォーカスを設定できない

<textarea autofocus="true" id="editable" name="editable"></textarea> 

ユーザーは、いくつかのデータを貼り付けしようとすると、私のコードが隠されcontenteditable divにペーストをリダイレクトします。これは、コードです。フォーカスを切り替える前に、私はそれを保存するので、これは、キャレット位置を失う:私は必要な変換を実行した後

var storedCaret = textarea.selectionStart; 

その後、私はそれを取得しよう:

editable.focus(); 
    editable.setSelectionRange(storedCaret, storedCaret); 
    window.setTimeout(function() { 
     document.execCommand("insertHTML", false, formattedText); 
    }, 50); 

これだけで正常に動作しますChrome用(49.0.2623.87 m)しかし、Firefox(43.0.1)ではペーストがうまくいかず、私の欲求不満に悩まされました。私のデバッグから、execCommandが発生すると、textarea#editabledocument.activeElementとして正しく選択されていますが、ペーストが完全に失敗します。

jQueryは許容される解決策ですが、私は他のplguinsを使用する必要はありません。私の立場では失われたと混乱した魂のために

答えて

0

、これは私が一緒に行くことになったものです:

if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) 
     { 
      var strLeft = textarea.value.substring(0, currentPos); 
      var strRight = textarea.value.substring(currentPos, textarea.value.length); 
      textarea.value = strLeft + formattedText + strRight; 
     } 

insertHTMLがChromeでよりよく働いていたので、それは場合に包まれています。基本的にカーソルの位置を保存してから文字列にスプライスします。私の必要性のためにブルートしかし効果的。

関連する問題