Ich habe einen einfachen HTML-Textbereich auf meiner Seite. Wenn Sie jetzt auf die Registerkarte klicken, wird das nächste Feld angezeigt. Ich möchte stattdessen die Tabulatortaste ein paar Leerzeichen einrücken. Wie kann ich das machen? Vielen Dank.
143
Antworten:
In hohem Maße von anderen Antworten auf ähnliche Fragen entlehnt (siehe unten) ...
jQuery: So erfassen Sie den TAB-Tastendruck in einem Textfeld
Wie gehe ich mit <tab> im Textbereich um?
http://jsfiddle.net/jz6J5/
quelle
Diese Lösung erfordert kein jQuery und aktiviert die Registerkartenfunktionalität für alle Textbereiche auf einer Seite.
quelle
this.selectionEnd = s+1;
durchthis.selectionEnd = s + "\t".length;
. Es wäre sauberer, eine Variable oder einen Funktionsparameter zu verwenden und die Einrückungszeichen dort zu speichern. Aber Sie wissen jetzt, was Sie ersetzen müssen: Das+1
definiert, wie viel Zeichen das Caret bewegt.KeyboardEvent.keyCode
undKeyboardEvent.which
sind veraltete Eigenschaften. Verwenden SieKeyboardEvent.key
stattdessen.Wie andere geschrieben haben, können Sie das Ereignis mit JavaScript erfassen, die Standardaktion verhindern (damit der Cursor den Fokus nicht verschiebt) und ein Tabulatorzeichen einfügen.
Durch Deaktivieren des Standardverhaltens ist es jedoch unmöglich, den Fokus ohne Verwendung einer Maus aus dem Textbereich zu verschieben. Blinde Benutzer interagieren mit Webseiten über die Tastatur und nichts anderes - sie können den Mauszeiger nicht sehen, um etwas Nützliches damit zu tun, also ist es Tastatur oder nichts. Die Tabulatortaste ist die primäre Methode zum Navigieren im Dokument und insbesondere in Formularen. Durch Überschreiben des Standardverhaltens der Tabulatortaste können blinde Benutzer den Fokus nicht auf das nächste Formularelement verschieben.
Wenn Sie also eine Website für ein breites Publikum schreiben, würde ich davon abraten, dies ohne zwingenden Grund zu tun , und blinden Benutzern eine Alternative bieten, die sie nicht im Textbereich einfängt.
quelle
Für das, was es wert ist, hier ist mein Oneliner, für das, worüber Sie alle in diesem Thread gesprochen haben:
Test in den neuesten Editionen von Chrome, Firefox, Internet Explorer und Edge.
quelle
if(event.shiftKey){if(v.substring(s-1,s)==='\t'){this.value=v.substring(0,s-1)+v.substring(e);this.selectionStart=this.selectionEnd=s-1;}}
Hier ist meine Version davon, unterstützt:
quelle
Moderne Methode, bei der beide unkompliziert sind und nicht die Fähigkeit verlieren, die letzten Änderungen rückgängig zu machen (Strg + Z).
Mehr zu
execCommand
:Bearbeiten:
Wie im Kommentar erwähnt (und obwohl dies einst eine "moderne" Lösung war ), ist die Funktion veraltet. Zitieren der Dokumente:
quelle
indent-textarea
mit einer browserübergreifenden Lösung, die diese Methode + einen Fallback in Firefox verwendet.document.execCommand
erst nach dem Einstellen aktiviertdocument.designMode = "on";
. Ich bin in der Lage, Text in Elemente zu schreiben, die haben.contentEditable = 'true'
. Wenn ich jedoch versuche, dies in einem Textbereich zu erreichen, wird der eingefügte textNode direkt vor dem Textbereich innerhalb des Dokuments platziert (anstatt in den Textbereich). Bitte versuchen Sie diese Mozilla Abbildung , um zu helfen hier .execCommand
): "Diese Funktion ist veraltet. Obwohl es in einigen Browsern möglicherweise noch funktioniert, wird von seiner Verwendung abgeraten, da es jederzeit entfernt werden kann. Versuche es zu vermeiden. 'Ich kam nicht schnell dahin, @ kasdegas Antwort in einer AngularJS-Umgebung zu verwenden. Nichts, was ich versuchte, schien Angular dazu zu bringen, auf die Änderung zu reagieren. Für den Fall, dass es für Passanten von Nutzen ist, hier eine Neufassung von @ kasdegas Code im AngularJS-Stil, der für mich funktioniert hat:
und:
quelle
element.triggerHandler('change');
, sonst wird das Modell nicht aktualisiert (wegen derelement.triggerHandler('change');
ich denke.Sie müssen JS-Code schreiben, um den TAB-Tastendruck abzufangen und eine Reihe von Leerzeichen einzufügen. Ähnlich wie JSFiddle.
Überprüfen Sie jquery Geige :
HTML :
JavaScript :
quelle
event.preventDefault();
e.keyCode || e.which
.Mehrzeiliges Indetationsskript basierend auf der @ kasdega-Lösung.
quelle
start === end
.Diese Lösung ermöglicht das Tabulieren einer gesamten Auswahl wie bei einem typischen Code-Editor und das Deaktivieren dieser Auswahl. Ich habe jedoch nicht herausgefunden, wie Shift-Tab implementiert werden soll, wenn keine Auswahl vorhanden ist.
quelle
if (selected.length > 0) {...}
Geige gemacht: jsfiddle.net/jwfkbjkrBasierend auf all dem, was die Leute hier zu den Antworten zu sagen hatten, ist es nur eine Kombination aus Keydown (nicht Keyup) + PreventDefault () + Einfügen eines Tabulatorzeichens in das Caret. Etwas wie:
Die frühere Antwort hatte eine funktionierende jsfiddle, verwendete jedoch einen Alarm () bei Keydown. Wenn Sie diese Warnung entfernen, hat sie nicht funktioniert. Ich habe gerade eine Funktion hinzugefügt, um eine Registerkarte an der aktuellen Cursorposition im Textbereich einzufügen.
Hier arbeitet jsfiddle für dasselbe: http://jsfiddle.net/nsHGZ/
quelle
Ich sehe, dass dieses Thema nicht gelöst ist. Ich habe das codiert und es funktioniert sehr gut. Es wird eine Tabelle am Cursorindex eingefügt. Ohne jquery zu benutzen
quelle
Halten Sie ALT gedrückt und drücken Sie 0,9 auf dem Ziffernblock. Es funktioniert in Google-Chrome
quelle
Ich habe eine erstellt, auf die Sie mit jedem beliebigen Textbereichselement zugreifen können:
Und das Element würde so aussehen:
quelle
Der einfachste Weg , dies in modernen Browsern mit Vanille-JavaScript zu tun, ist:
Beachten Sie, dass ich in diesem Snippet der Einfachheit halber viele ES6-Funktionen verwendet habe. Sie sollten es wahrscheinlich (mit Babel oder TypeScript) transpilieren, bevor Sie es bereitstellen.
quelle
Die obigen Antworten beantworten alle Löschvorgänge. Für alle, die nach einer Lösung suchen, die dies nicht tut, habe ich die letzte Stunde damit verbracht, Folgendes für Chrome zu programmieren:
Kurz gesagt, am Anfang der ausgewählten Zeilen werden Registerkarten eingefügt.
JSFiddle: http://jsfiddle.net/iausallc/5Lnabspr/11/
Inhalt: https://gist.github.com/iautomation/e53647be326cb7d7112d
Anwendungsbeispiel:
$('textarea').enableTabs('\t')
Nachteile: Funktioniert nur in Chrome wie es ist.
quelle
Auf Github gibt es eine Bibliothek zur Unterstützung von Registerkarten in Ihren Textbereichen von wjbryant: Tab Override
So funktioniert es:
quelle
Als Option zum obigen Kasdega-Code können Sie anstelle der Registerkarte an den aktuellen Wert Zeichen am aktuellen Cursorpunkt einfügen. Dies hat den Vorteil von:
also ersetzen
mit
quelle
quelle
Probieren Sie diese einfache jQuery-Funktion aus:
quelle
Ich musste eine Funktion erstellen, um dasselbe zu tun. Es ist einfach zu verwenden. Kopieren Sie einfach diesen Code in Ihr Skript und verwenden Sie:
enableTab( HTMLElement )
HTMLelement ist so etwas wiedocument.getElementById( id )
Der Code lautet:
quelle
Jede Eingabe eines Textarea-Elements hat ein Onkeydown-Ereignis. Im Ereignishandler können Sie die Standardreaktion der Tabulatortaste verhindern, indem Sie event.preventDefault () verwenden, wenn event.keyCode 9 ist.
Setzen Sie dann ein Tabulatorzeichen an die richtige Stelle:
html
quelle
quelle
Einfaches eigenständiges Skript:
quelle
Wenn Sie wirklich Registerkarten benötigen, kopieren Sie eine Registerkarte aus dem Wort oder Notizblock und fügen Sie sie in das gewünschte Textfeld ein
1 2 3
12 22 33
Leider denke ich, dass sie die Tabs aus diesen Kommentaren entfernen :) Es wird als% 09 in Ihrem POST oder GET angezeigt
quelle