Einfügeereignis in Javascript abfangen

Lesezeit: 3 Minuten

Einfugeereignis in Javascript abfangen
Brandon

Gibt es eine Möglichkeit, das Einfügeereignis in JavaScript abzufangen und den Rohwert abzurufen, ihn zu ändern und den Wert des zugehörigen DOM-Elements auf den geänderten Wert festzulegen?

Zum Beispiel habe ich einen Benutzer, der versucht, eine Zeichenfolge mit Leerzeichen zu kopieren und einzufügen, und die Länge der Zeichenfolge überschreitet die maximale Länge meines Textfelds. Ich möchte den Text abfangen, die Leerzeichen entfernen und dann den Wert des Textfelds mit dem Änderungswert festlegen.

Ist das möglich?

  • Sicher, zB stackoverflow.com/questions/2242442/…. Oder: jsfiddle.net/6skZQ.

    – pimvdb

    17. Mai ’11 um 18:02 Uhr


  • @pimvdb: Ihr jsFiddle-Beispiel funktioniert nicht in Firefox, IE oder Opera.

    – Tim unten

    17. Mai 11 um 23:53 Uhr


  • @Tim Down: Danke, dass du es bemerkt hast, die Funktion der browserübergreifenden Zwischenablage scheint ein Problem zu sein.

    – pimvdb

    19. Mai ’11 um 18:33 Uhr

1643067306 286 Einfugeereignis in Javascript abfangen
Maerik

Sie können das Paste-Ereignis abfangen, indem Sie einen “onpaste”-Handler anhängen und den eingefügten Text abrufen, indem Sie “window.clipboardData.getData('Text')” im IE oder “event.clipboardData.getData('text/plain')” in anderen Browsern.

Beispielsweise:

var myElement = document.getElementById('pasteElement');
myElement.onpaste = function(e) {
  var pastedText = undefined;
  if (window.clipboardData && window.clipboardData.getData) { // IE
    pastedText = window.clipboardData.getData('Text');
  } else if (e.clipboardData && e.clipboardData.getData) {
    pastedText = e.clipboardData.getData('text/plain');
  }
  alert(pastedText); // Process and handle text...
  return false; // Prevent the default handler from running.
};

Wie @pimvdb feststellt, müssen Sie “e.originalEvent.clipboardData” bei Verwendung von jQuery.

  • Wenn ich den obigen Code im IE mache, mache ich aber folgendes: myElement.Value = pastedText.split(' ').join(''); es setzt den Wert auf den ursprünglich eingefügten Wert. Irgendwelche Ideen? Ich habe diesen Scheck hinzugefügt alert(myElement.Value); und gebe true zurück und der Wert sieht in meiner Warnung korrekt aus, wird aber auf meiner Seite nicht korrekt angezeigt.

    – Brandon

    17. Mai ’11 um 18:43 Uhr


  • Indem Sie „true“ zurückgeben, erlauben Sie, dass der standardmäßige „Paste“-Handler nach Ihrem eigenen Handler auftritt, der nur den Text ohne Ihre benutzerdefinierte Verarbeitung einfügt. Die Rückgabe von „false“ verhindert, dass der Standard-Paste-Handler ausgeführt wird (weshalb ich dies in meinem Beispiel getan habe).

    – Maerik

    17. Mai 11 um 18:54 Uhr


  • Es sieht so aus, als ob Firefox keine Zwischenablageoperationen zulässt …

    – Maerik

    17. Mai ’11 um 18:55 Uhr

  • Für diejenigen, die wie ich nach dem letzten Teil des Puzzles suchten, “den Wert des Textfelds mit dem geparsten Wert festlegen”, habe ich Folgendes verwendet, um das endgültige Einfügen durchzuführen: “document.execCommand(“insertText”, false, pastedText );”

    – Christopher Alun Lewis

    17. November 16 um 15:42 Uhr

  • @Veve, das funktioniert nicht, wenn Sie irgendeine Art von Manipulation durchführen pastedText. Richtig?

    – Claudio

    28. April 17 um 17:32 Uhr

1643067306 237 Einfugeereignis in Javascript abfangen
Tim unten

Zufällig habe ich heute früher eine ähnliche Frage beantwortet. Kurz gesagt, Sie brauchen einen Hack, um das Caret-Zeichen in einen Textbereich außerhalb des Bildschirms umzuleiten, wenn das Einfügeereignis ausgelöst wird.

$(document).ready(function() {
    $("#editor").bind('paste', function (e){
        $(e.target).keyup(getInput);
    });

    function getInput(e){
        var inputText = $(e.target).val();
        alert(inputText);
        $(e.target).unbind('keyup');
    }
});

Einfugeereignis in Javascript abfangen
Craig Silber

Ich musste ein “Trimmen” für alles einfügen, was eingefügt wurde (alle führenden und nachgestellten Leerzeichen entfernen), während die Verwendung der Leertaste weiterhin zulässig war.

Für Strg+V, Umschalt+Einfügen und Einfügen mit der rechten Maustaste funktioniert Folgendes in FF, IE11 und Chrome seit dem 22.04.2017:

$(document).ready(function() {
    var lastKeyCode = 0;

    $('input[type="text"]').bind('keydown', function(e) {
        lastKeyCode = e.keyCode;
    });
    // Bind on the input having changed.  As long as the previous character
    // was not a space, BS or Del, trim the input.
    $('input[type="text"]').bind('input', function(e) {
        if(lastKeyCode != 32 && lastKeyCode != 8 && lastKeyCode != 46) {
            $(this).val($(this).val().replace(/^s+|s+$/g, ''));
        }
    });
});

Zwei Vorbehalte:

  1. Wenn beim Einfügen bereits Text vorhanden ist, wird das gesamte Ergebnis getrimmt, nicht nur das, was eingefügt wird.

  2. Wenn der Benutzer Leerzeichen oder BS oder Entf eingibt und dann einfügt, erfolgt kein Trimmen.

.

624590cookie-checkEinfügeereignis in Javascript abfangen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy