Ich möchte eine einfache Funktion erstellen, die Text in einem Textbereich an der Cursorposition des Benutzers hinzufügt. Es muss eine saubere Funktion sein. Nur die Grundlagen. Ich kann den Rest herausfinden.Text in Textfeld an Cursorposition einfügen (Javascript)
Antwort
function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
//MOZILLA and others
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
} else {
myField.value += myValue;
}
}
das funktioniert nur in IE –
Code Edited. Überprüfen Sie jetzt – Rab
funktioniert fast in anderen: Es verliert die aktuelle Position. – user340140
Dieser Ausschnitt kann man mit ihm in ein paar Zeilen von jQuery helfen 1.9+: http://jsfiddle.net/4MBUG/2/
$('input[type=button]').on('click', function() {
var cursorPos = $('#text').prop('selectionStart');
var v = $('#text').val();
var textBefore = v.substring(0, cursorPos);
var textAfter = v.substring(cursorPos, v.length);
$('#text').val(textBefore + $(this).val() + textAfter);
});
Großartig! Funktioniert auch mit 1.6 mit kleinen Änderungen. –
Aber es kann ausgewählter Text nicht ersetzen –
Für jeden, der den ausgewählten Text ersetzen möchte: http://jsfiddle.net/4abr7jc5/2/ – mparkuk
es zu getElementById (myField) Changed
function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
document.getElementById(myField).focus();
sel = document.selection.createRange();
sel.text = myValue;
}
//MOZILLA and others
else if (document.getElementById(myField).selectionStart || document.getElementById(myField).selectionStart == '0') {
var startPos = document.getElementById(myField).selectionStart;
var endPos = document.getElementById(myField).selectionEnd;
document.getElementById(myField).value = document.getElementById(myField).value.substring(0, startPos)
+ myValue
+ document.getElementById(myField).value.substring(endPos, document.getElementById(myField).value.length);
} else {
document.getElementById(myField).value += myValue;
}
}
Das wird die DOM Weg mehr als Sie brauchen .. Speichern 'Myfield' als lokale ist viel besser für die Leistung – TMan
Wow, wirklich viel zu viel Wiederholung von 'document.getElementById (myField)'! Tun Sie es einmal oben und verwenden Sie einen Variablennamen. Wie oft wollen Sie das gleiche Element redundant nachschlagen? – doug65536
Aus Gründen der ordnungsgemäßen Javascript
sehr schöne Erweiterung! Funktioniert wie erwartet. Vielen Dank! –
Beste Lösung! Danke –
Ich mag einfaches Javascript, und ich habe normalerweise jQuery herum. Hier ist, was ich kam mit der Basis aus mparkuk's:
function typeInTextarea(el, newText) {
var start = el.prop("selectionStart")
var end = el.prop("selectionEnd")
var text = el.val()
var before = text.substring(0, start)
var after = text.substring(end, text.length)
el.val(before + newText + after)
el[0].selectionStart = el[0].selectionEnd = start + newText.length
el.focus()
}
$("button").on("click", function() {
typeInTextarea($("textarea"), "some text")
return false
})
Hier ist eine Demo: http://codepen.io/erikpukinskis/pen/EjaaMY?editors=101
Eine reine JS Modifikation von Erik Antwort:
function typeInTextarea(el, newText) {
var start = el.selectionStart
var end = el.selectionEnd
var text = el.value
var before = text.substring(0, start)
var after = text.substring(end, text.length)
el.value = (before + newText + after)
el.selectionStart = el.selectionEnd = start + newText.length
el.focus()
}
in Chrome Getestet 47 nur.
Wenn Sie den Wert des aktuell ausgewählten Text ändern möchten, während Sie in dem gleichen Feld (für einen der automatischen Vervollständigung oder ähnlicher Wirkung) sind die Eingabe, übergeben document.activeElement
als ersten Parameter.
Es ist nicht die eleganteste Art, dies zu tun, aber es ist ziemlich einfach.
Sie haben die Linie mit >> nicht geschlossen; << – Phoenix
@Phoenix Semikolons sind optional in Javascript. Arbeitet auch ohne sie. Sie können jedoch in Semikola bearbeiten, wenn Sie möchten. Kein großes Problem. –
[Ich machte eine Demo auf JSFiddle.] (Https://jsfiddle.net/j77uezpL/) Es funktioniert auch mit 'Version 54.0.2813.0 Kanarienvogel (64-Bit)', das ist im Grunde Chrome Canary 54.0.2813.0. Schließlich, wenn Sie möchten, dass es nach ID in das Textfeld eingefügt wird, verwenden Sie 'document.getElementById ('insertyourIDhere')' anstelle von 'el' in der Funktion. – haykam
Geänderte Funktion für eigene Referenz buchen. In diesem Beispiel wird ein ausgewähltes Element aus <select>
Objekt und setzt die Einfügemarke zwischen den Tags:
//Inserts a choicebox selected element into target by id
function insertTag(choicebox,id) {
var ta=document.getElementById(id)
ta.focus()
var ss=ta.selectionStart
var se=ta.selectionEnd
ta.value=ta.value.substring(0,ss)+'<'+choicebox.value+'>'+'</'+choicebox.value+'>'+ta.value.substring(se,ta.value.length)
ta.setSelectionRange(ss+choicebox.value.length+2,ss+choicebox.value.length+2)
}
Rab Antwort funktioniert gut, aber nicht für Microsoft Edge, so habe ich eine kleine Anpassung Edge auch:
https://jsfiddle.net/et9borp4/
function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
// Microsoft Edge
else if(window.navigator.userAgent.indexOf("Edge") > -1) {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)+ myValue
+ myField.value.substring(endPos, myField.value.length);
var pos = startPos + myValue.length;
myField.focus();
myField.setSelectionRange(pos, pos);
}
//MOZILLA and others
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
} else {
myField.value += myValue;
}
}
/**
* Usage "foo baz".insertInside(4, 0, "bar ") ==> "foo bar baz"
*/
String.prototype.insertInside = function(start, delCount, newSubStr) {
return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
};
$('textarea').bind("keydown keypress", function (event) {
var val = $(this).val();
var indexOf = $(this).prop('selectionStart');
if(event.which === 13) {
val = val.insertInside(indexOf, 0, "<br>\n");
$(this).val(val);
$(this).focus();
}
})
Während dies die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort zu erklären und möglicherweise das Problem mit dem OP-Code. – pirho
Wenn der Benutzer berührt nicht die Eingabe nach Text eingefügt wird, das ‚Input‘ Ereignis nie ausgelöst wird, und der Wert attribu te wird die Änderung nicht wiedergeben. Daher ist es wichtig, das Eingabeereignis nach dem programmatischen Einfügen von Text auszulösen. Das Feld zu fokussieren ist nicht genug.
Das Folgende ist eine Kopie von Snorvarg's answer mit einer Trigger-Eingang am Ende:
function insertAtCursor(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
// Microsoft Edge
else if(window.navigator.userAgent.indexOf("Edge") > -1) {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)+ myValue
+ myField.value.substring(endPos, myField.value.length);
var pos = startPos + myValue.length;
myField.focus();
myField.setSelectionRange(pos, pos);
}
//MOZILLA and others
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
} else {
myField.value += myValue;
}
triggerEvent(myField,'input');
}
function triggerEvent(el, type){
if ('createEvent' in document) {
// modern browsers, IE9+
var e = document.createEvent('HTMLEvents');
e.initEvent(type, false, true);
el.dispatchEvent(e);
} else {
// IE 8
var e = document.createEventObject();
e.eventType = type;
el.fireEvent('on'+e.eventType, e);
}
}
Credit plainjs.com für die trigger Funktion
Mehr zu dem oninput Ereignisse bei w3schools.com
ich entdecken Dies während der Erstellung eines Emoji-Picker für einen Chat.Wenn der Benutzer nur ein paar Emojis auswählt und den "Senden" -Knopf drückt, wird das Eingabefeld niemals vom Benutzer berührt. Beim Überprüfen des Wertattributs war es immer leer, obwohl die eingefügten Emoji-Unicodes im Eingabefeld sichtbar waren. Stellt sich heraus, dass das Ereignis 'input' nie ausgelöst wurde, wenn der Benutzer das Feld nicht berührt, sollte die Lösung so ausgelöst werden. Es hat eine ganze Weile gedauert, bis ich das herausgefunden habe ... ich hoffe, es wird jemandem Zeit sparen.
- 1. Text in das WPF-Textfeld an der Cursorposition einfügen
- 2. Bild an Cursorposition im Rich Textfeld einfügen
- 3. vb.net Text in aktives Textfeld einfügen
- 4. Einfügen von Text an der Cursorposition in WYSIHTML5 Editor
- 5. Einfügen von Text an der Cursorposition in Embarcadero Tools API
- 6. Text in Javascript einfügen contenteditable div
- 7. Zeichenfolge an Cursorposition von UITextField einfügen
- 8. Text aus Textfeld nehmen und in span in Javascript einfügen
- 9. So fügen Sie Text an der aktuellen Cursorposition in einem Textfeld ein
- 10. mehrzeiligen String in gVim an der Cursorposition einfügen
- 11. Wie Einfügen eines vorformatierten Textes an der Cursorposition in VS2008?
- 12. Einfügen eines neuen Textes an der angegebenen Cursorposition
- 13. Einfügen von Text an den Cursor in einem Textfeld, mit Javascript
- 14. Wie Text in einem Textfeld an JavaScript-Funktion übergeben?
- 15. Einfügen von Text an aktuelle Cursorposition in TextArea mit AngularJs Ng-Click
- 16. Wie füge ich Text an meiner Cursorposition in Word ein?
- 17. Text automatisch in Textfeld mit eingebetteter Yammer-Datei einfügen
- 18. Einfügen von Text in Textfeld in tcl tk durch Thread
- 19. Cursorposition in einem Text-Widget festlegen
- 20. Text in das Textfeld einer anderen Anwendung einfügen
- 21. Text des Textfelds an Cursorposition teilen. (asp.net C#)
- 22. Programmatisch Text in Textfeld in einer anderen Anwendung einfügen
- 23. Cursorposition in UITextField steuern
- 24. Formel in Textfeld einfügen - Excel
- 25. Text in ausgewählte Textbox einfügen Javascript verwenden
- 26. Einfügen von Text in Pastebin mit JavaScript
- 27. contentEditable Texteditor und Cursorposition
- 28. Wie kann ich ein Dropdown an der Cursorposition in einem Textfeld positionieren?
- 29. Einfügen von Text an dem Punkt Cursor - Einfügen von zur Zeit in das geklickt Element nicht Textfeld
- 30. PHP MySQL kann nicht in Textfeld einfügen
möglich Duplikat von [Wie füge ich etwas Text ein, wo der Cursor ist?] (Http://stackoverflow.com/questions/7404366/how-do-i-insert-some-text-where-the-cursor- ist) –
Werfen Sie einen Blick auf diese Antwort bereits geschrieben: http://stackoverflow.com/questions/4456545/how-to-insert-text-at-the-current-caret-position-in-a- textarea –
möglich Duplikat von [Einfügen eines Textes, wo der Cursor Javascript/jquery verwendet] (http://stackoverflow.com/questions/1064089/inserting-a-text-where-cursor-is-using-javascript-jquery) – user