11 Stimmen

Javascript, um Eingabefeld im Bearbeitungsmodus (Einfügemodus) zu erstellen

Wie ist es möglich, ein Eingabefeld in JavaScript bearbeitbar zu machen? Ich meine, onFocus, um es im Einfügemodus zu setzen, damit Werte überschrieben werden können. Irgendwelche Vorschläge ???

0 Stimmen

Ist ein Eingabefeld nicht bereits bearbeitbar? Du redest von , richtig?

1 Stimmen

@mplacona: Er meint, den Einfügen-Button auf der Tastatur nachzuahmen, um das folgende Zeichen zu überschreiben.

0 Stimmen

Ich lese es als Implementierung von Bearbeiten am Platz, aber es könnte auch bedeuten, dass eine einfache, alte Eingabe in einer Datenbank gespeichert wird. Weitere Klarstellungen sind erforderlich.

14voto

A1rPun Punkte 15350

Dies sollte in modernen Browsern funktionieren (auch auf Mobilgeräten):

const input = document.querySelector('input'); // oder ein Textfeld
input.addEventListener('keypress', function() {
  const s = this.selectionStart;
  this.value = this.value.slice(0, s) + this.value.slice(s + 1);
  this.selectionEnd = s;
}, false);

Hinweis: Dies ist eine grundlegende Form der Einfügefunktionalität, daher können einige Standardfunktionen wie STRG+Z beeinträchtigt sein.

0 Stimmen

Vielen Dank, es war zumindest für mich nützlich

2 Stimmen

Mit dieser Lösung haben Sie leider die Möglichkeit zum Rückgängigmachen (ctrl-z) verloren.

0 Stimmen

@DiegoPamio Leider ist es so. Ich habe versucht, meine eigene CTRL+Z Implementierung zu machen, aber sie ist in vielen Fällen gescheitert.

6voto

Sam152 Punkte 18557

Nachdem ich ein wenig gegoogelt habe, scheint dies damit zusammenzuhängen. Es könnte funktionieren, wenn man ein wenig mit folgendem Code herumspielt, aber es könnte nur in bestimmten Browsern auf spezifischen Betriebssystemen funktionieren. Es ist jedoch einen Versuch wert.

document.execCommand('OverWrite', false, true);
document.execCommand('OverWrite', false, false);

Wie von Ihnen angefordert, würde die Implementierung ungefähr so aussehen:

0 Stimmen

Ich würde hier +1 geben, wenn es mehr browserübergreifend kompatibel wäre. Tatsächlich wird es nur von Internet Explorer unterstützt. Tatsächlich scheint nur der IE die Einfügetaste für das Überschreiben von Eingaben zu unterstützen.

0 Stimmen

Ich habe versucht, dies zu verwenden, aber ohne Erfolg... kannst du ein kurzes Beispiel geben, wie man es umsetzen kann. Ich verwende das onKeypress Ereignis. Danke

1 Stimmen

2020 Update: Dies funktioniert für IE, aber nicht für Firefox, Chromium oder Edge Legacy. Die Einfg-Taste funktioniert in ContentEditable-Bereichen in Chromium, aber nicht in Firefox. webdbg.com/test/edit

1voto

ajm Punkte 19079

EDIT: Kann je nach Bedeutung hinter der Frage völlig off-topic sein.

Wenn Sie jQuery verwenden können, ist Jeditable ein schönes Plugin, um genau das zu tun.

Wenn Sie Ihren eigenen Code schreiben müssen, werfen Sie einen Blick darauf, wie das Plugin funktioniert, und verwenden Sie es als Ausgangspunkt.

Im Grunde genommen sind die Schritte:

  1. onFocus/onClick - Tauschen Sie Ihr Feld mit einem Eingabefeld aus.
  2. Wenn der Benutzer "fertig" ist (Enter drücken, auf eine Schaltfläche klicken), senden Sie das Ergebnis über Ajax an den Server zurück.
  3. Wenn Ihre Anforderung abgeschlossen ist, aktualisieren Sie die Benutzeroberfläche mit dem neuen Wert und verstecken Sie das Eingabefeld.

0 Stimmen

+1, Ich war gerade dabei, das vorzuschlagen. Ich ziehe es vor, an dieses Plugin als "Jedi-Tabelle" zu denken.

0 Stimmen

Wow. Ich gehe ab jetzt mit dem Jedi-Tisch.

1voto

Alsciende Punkte 25697

Sie können versuchen, den Einfügemodus zu imitieren, indem Sie den Eingabewert bei keyup neu schreiben:

var input = $('input'); // Ihr Eingabeelement

Event.observe(input, 'keydown', function(e) { // Ereignisbehandler
   input._lastvalue = input.value;
});

Event.observe(input, 'keyup', function(e) { // Ereignisbehandler
    if(input.value == input._lastvalue) return;
    if(input.value.length <= input._lastvalue.length) return;
    var caretPos = doGetCaretPosition(input);
    input.value = input.value.slice(0,caretPos) + input.value.slice(caretPos+1);
    doSetCaretPosition(input, caretPos);
});

Hier ist eine Demo : http://jsfiddle.net/z6khW/

0 Stimmen

Vielen Dank für deine Bemühungen... Ich habe das Beispiel ausprobiert, aber es versucht tatsächlich, alle verbleibenden Zeichen auszuwählen und löscht sie.

0 Stimmen

Oops habe nicht auf IE getestet, nur FF.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X