2016-03-22 22 views
0

Ich habe ein Skript, wo ich Benutzer einfügen Daten einfügen, manipulieren, und dann wieder an der gleichen Stelle des Benutzers Cursor eingefügt wurde. Dies liegt daran, dass die Einfügedaten HTML sind und der Ort, an dem der Benutzer einfügt, textarea sein muss, der nur reinen Text akzeptiert. Dies ist der Code:Firefox kann den Fokus nicht auf den Textbereich setzen

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

Wenn der Benutzer versucht, einige Daten einfügen, meinen Code leitet die Paste auf eine versteckte contenteditable div. Diese verliert die Position der Einfügemarke, so vor Fokus wechseln, ich spare es mit:

var storedCaret = textarea.selectionStart; 

Später, nachdem ich die notwendigen Transformationen durchgeführt haben, ich versuche, es abzurufen:

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

Dies funktioniert gut für Chrome (49.0.2623.87 m). Aber zu meinem immensen Frust, in Firefox (43.0.1) funktioniert die Paste nicht. Von meinem Debugging wird zu dem Zeitpunkt, zu dem execCommand ausgelöst wird, textarea#editable korrekt als document.activeElement ausgewählt, aber die Paste schlägt vollständig fehl.

jQuery ist eine akzeptable Lösung, aber ich möchte keine anderen Plugins verwenden.

Antwort

0

Für die verloren und verwirrt Seelen in meiner Position, ist es das, was ich am Ende mit gehen:

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; 
     } 

Es gewickelt ist in einer if weil insertHTML besser funktioniert in Chrome. Es speichert grundsätzlich die Cursorposition und fügt dann Spleiße in die Zeichenfolge ein. Brutal, aber effektiv für meine Bedürfnisse.

Verwandte Themen