Deaktivieren Sie das Einfügen von Text in das HTML-Formular

Lesezeit: 12 Minuten

Deaktivieren Sie das Einfugen von Text in das HTML Formular
justinl

Gibt es eine Möglichkeit, JavaScript zu verwenden, um die Möglichkeit zum Einfügen von Text in ein Textfeld in einem HTML-Formular zu deaktivieren?

ZB habe ich ein einfaches Registrierungsformular, bei dem der Benutzer seine E-Mail-Adresse zweimal eingeben muss. Der zweite E-Mail-Eintrag soll sicherstellen, dass der erste E-Mail-Eintrag keine Tippfehler enthält. Wenn der Benutzer jedoch seine E-Mail kopiert/einfügt, verfehlt dies den Zweck, und ich habe erlebt, dass Benutzer Probleme haben, weil sie die falsche E-Mail eingegeben und kopiert/eingefügt haben.

Vielleicht war meine Frage nicht klar, aber ich versuche nicht, Leute daran zu hindern, Text in ihrem Browser zu kopieren (oder durch Ziehen auszuwählen). Ich will sie nur davon abhalten einfügen Eingabe in ein Textfeld, um Benutzerfehler zu minimieren.

Vielleicht können Sie, anstatt diesen “Hack” zu verwenden, eine andere Lösung für das Kernproblem vorschlagen, das ich hier zu lösen versuche? Ich habe weniger als ein halbes Dutzend Benutzertests durchgeführt und dies ist bereits zweimal passiert. Mein Publikum verfügt nicht über ein hohes Maß an Computerkenntnissen.

  • Personen daran hindern, ihre E-Mail-Adresse aus ihrem Adressbuch in ihren Browser zu kopieren/einzufügen. Das kommt gut an.

    – QUentin

    4. August 2009 um 10:08 Uhr

  • Kann nicht viel tun, wenn ein Kunde auf der Änderung besteht. genießen Sie Ihr Getränk 🙂

    – justinl

    7. Juli 2011 um 4:05 Uhr

  • Es könnte völlig in Ordnung sein, wenn er das Einfügen in das Bestätigungsfeld nur dann deaktiviert, wenn die E-Mail NICHT in das ursprüngliche Feld eingefügt wurde. Mit anderen Worten, der Benutzer muss die E-Mail entweder in beide Felder oder in keines der Felder einfügen.

    – GJ.

    9. November 2012 um 21:42 Uhr

  • Wenn ein Kunde danach fragt, sagen Sie ihm, wie schlecht die Idee ist. Es ist eine großartige Möglichkeit, einen Kunden genau an dem Punkt zu verärgern, an dem er am wahrscheinlichsten einfach weggeht (zur Registrierungszeit). Sie möchten nicht, dass eine Kundenbeziehung damit beginnt, dass der Kunde entfremdet wird. Diese Praxis wird sowohl immer häufiger als auch zunehmend anstößig, da immer mehr Menschen Passwort-Manager verwenden. Siehe auch: ux.stackexchange.com/q/21062/9529 und ob. xkcd: xkcd.com/970

    – Mark Booth

    29. Dezember 2014 um 13:12 Uhr


  • Ich habe diese Frage gefunden, als ich nachgeschaut habe, wie ich dieses “Feature” mit dem Elementinspektor umgehen kann. Es funktionierte!

    – SVD

    7. November 2017 um 21:59 Uhr

Deaktivieren Sie das Einfugen von Text in das HTML Formular
Pekka

Tu es nicht. Leg dich nicht mit dem Browser des Benutzers an. Durch Kopieren + Einfügen in ein E-Mail-Bestätigungsfeld übernimmt der Benutzer die Verantwortung für das, was er eingibt. Wenn sie dumm genug sind, eine fehlerhafte Adresse zu kopieren und einzufügen (das ist mir passiert), dann ist es ihre eigene verdammte Schuld.

Wenn Sie sicherstellen möchten, dass die E-Mail-Bestätigung funktioniert, lassen Sie den Benutzer seine E-Mail überprüfen, während Ihre Website wartet (“Bitte öffnen Sie Ihr Webmail-Programm in einem neuen Fenster”). Zeigen Sie die E-Mail-Adresse in großen, fetten Buchstaben an (“Die Bestätigungs-E-Mail wurde gesendet an …. hat einen Fehler gemacht? Klicken Sie hier, um zu ändern).

Noch besser, wenn Sie können, lassen Sie dem Benutzer eine Art eingeschränkten Zugriff ohne Bestätigung. So kann er sich sofort einloggen und Sie verbessern Ihre Chancen, mit dem Besucher in Kontakt zu bleiben, auch wenn die Bestätigungsmail aus anderen Gründen (zB Spamfilter) blockiert wird.

  • Ich stimme Ihrer Antwort für ein Szenario zu, in dem die Benutzer selbst Daten eingeben. Wenn jedoch ein Benutzer eine E-Mail-Adresse im Namen einer anderen Person eingibt – zum Beispiel ein CRM-System oder ähnliches – ist es nicht möglich, Ihre Lösung zu implementieren. In diesen Fällen gibt der Benutzer nicht seine eigene E-Mail-Adresse ein, sodass er sie wahrscheinlich falsch schreibt. Wenn Sie das Einfügen in das E-Mail-Bestätigungsfeld zulassen, erhalten Sie viele falsche Daten, sodass nichts dagegen einzuwenden ist, das Einfügen zu verhindern. Als Entwickler müssen Sie gegen “dumme” Benutzer vorgehen, um die Unternehmensdaten zu schützen.

    – sietiman

    24. April 2013 um 10:57 Uhr

  • Es gibt auch den häufigen Fall, dass der Entwickler, der sich mit dieser Frage befasst, wenig oder gar keine Kontrolle über die Anforderungen des Projekts hat, an dem er arbeitet. Dies ist keine Antwort auf die hier gestellte Frage, also -1.

    – Nick

    9. März 2015 um 21:11 Uhr

  • Zu sagen, tu es nicht, beantwortet die Frage nicht. Ich habe derzeit eine Anforderung, bei der das Einfügen deaktiviert werden soll.

    – Darian Everett

    3. September 2015 um 16:14 Uhr

  • Wenn Ihnen jemals eine Anforderung wie diese gestellt wird, ist es Ihre Aufgabe als Profi, sie zurückzudrängen. Sie sind mehr als ein paar Hände, die Code schreiben können.

    – Dan

    31. Juli 2016 um 2:54 Uhr


  • Aber es gibt triftige Gründe für fast alles, und jemandes Frage nicht zu beantworten, weil man der Meinung ist, dass IHR Grund nicht gültig ist, ist irritierend. Angenommen, Sie hatten ein Quiz, das Sie mit komplexen Antworten implementieren wollten. Das Deaktivieren des Einfügens und das Zwingen des Schülers, die gesamte Antwort einzutippen, anstatt sie zu kopieren, würde dazu führen, dass er sich die Antwort einprägt, während nur ein Kopieren und Einfügen wahrscheinlich wertlos wäre. Es gibt einen triftigen Grund, dies zu tun. Warnen Sie jemanden, dass das, was er zu tun versucht, in den meisten Fällen keine gute Idee ist, aber geben Sie eine Antwort … oder es ist am besten, sich nicht die Mühe zu machen, zu antworten.

    – Halber Schrei

    2. August 2017 um 19:39 Uhr


Fügen Sie den Eingaben, für die Sie die Funktion zum Kopieren und Einfügen deaktivieren möchten, eine Klasse von „disablecopypaste“ hinzu, und fügen Sie dieses jQuery-Skript hinzu

  $(document).ready(function () {
    $('input.disablecopypaste').bind('copy paste', function (e) {
       e.preventDefault();
    });
  });

  • Funktioniert gut für mich, Tanks!

    – Gabriel Glauber

    24. April 2017 um 18:11 Uhr

1646026514 255 Deaktivieren Sie das Einfugen von Text in das HTML Formular
Christoph Parker

Ich musste kürzlich widerwillig das Einfügen in ein Formularelement deaktivieren. Dazu habe ich eine Cross-Browser*-Implementierung des onpaste-Event-Handlers von Internet Explorer (und anderen) geschrieben. Meine Lösung musste unabhängig von JavaScript-Bibliotheken von Drittanbietern sein.

Hier ist, was ich mir ausgedacht habe. Es deaktiviert das Einfügen nicht vollständig (der Benutzer kann beispielsweise jeweils ein einzelnes Zeichen einfügen), aber es erfüllt meine Anforderungen und vermeidet den Umgang mit keyCodes usw.

// Register onpaste on inputs and textareas in browsers that don't
// natively support it.
(function () {
    var onload = window.onload;

    window.onload = function () {
        if (typeof onload == "function") {
            onload.apply(this, arguments);
        }

        var fields = [];
        var inputs = document.getElementsByTagName("input");
        var textareas = document.getElementsByTagName("textarea");

        for (var i = 0; i < inputs.length; i++) {
            fields.push(inputs[i]);
        }

        for (var i = 0; i < textareas.length; i++) {
            fields.push(textareas[i]);
        }

        for (var i = 0; i < fields.length; i++) {
            var field = fields[i];

            if (typeof field.onpaste != "function" && !!field.getAttribute("onpaste")) {
                field.onpaste = eval("(function () { " + field.getAttribute("onpaste") + " })");
            }

            if (typeof field.onpaste == "function") {
                var oninput = field.oninput;

                field.oninput = function () {
                    if (typeof oninput == "function") {
                        oninput.apply(this, arguments);
                    }

                    if (typeof this.previousValue == "undefined") {
                        this.previousValue = this.value;
                    }

                    var pasted = (Math.abs(this.previousValue.length - this.value.length) > 1 && this.value != "");

                    if (pasted && !this.onpaste.apply(this, arguments)) {
                        this.value = this.previousValue;
                    }

                    this.previousValue = this.value;
                };

                if (field.addEventListener) {
                    field.addEventListener("input", field.oninput, false);
                } else if (field.attachEvent) {
                    field.attachEvent("oninput", field.oninput);
                }
            }
        }
    }
})();

Um davon Gebrauch zu machen, um das Einfügen zu deaktivieren:

<input type="text" onpaste="return false;" />

* Ich weiß, dass oninput nicht Teil der W3C-DOM-Spezifikation ist, aber alle Browser, mit denen ich diesen Code getestet habe – Chrome 2, Safari 4, Firefox 3, Opera 10, IE6, IE7 – unterstützen entweder oninput oder onpaste. Von all diesen Browsern unterstützt nur Opera nicht onpaste, aber es unterstützt oninput.

Hinweis: Dies funktioniert nicht auf einer Konsole oder einem anderen System, das eine Bildschirmtastatur verwendet (vorausgesetzt, die Bildschirmtastatur sendet keine Tasten an den Browser, wenn jede Taste ausgewählt wird). Wenn es möglich ist, dass Ihre Seite/App von jemandem mit einer Bildschirmtastatur und Opera (z. B.: Nintendo Wii, einige Mobiltelefone) verwendet werden könnte, verwenden Sie dieses Skript nicht, es sei denn, Sie haben die Bildschirmtastatur getestet sendet nach jeder Tastenauswahl Schlüssel an den Browser.

  • Um zu verhindern, dass Firefox diese dumme Regel befolgt, gehen Sie zu about:config und ändern Sie dom.event.clipboardevents.enabled auf false

    – lolesk

    2. April 2014 um 13:38 Uhr

  • Selbst wenn ich das von Ihnen geschriebene js nicht einfüge, kann ich den Benutzer daran hindern, etwas einzufügen, indem ich es einfach einfüge onpaste="return false"gibt es irgendein Problem, wenn ich mit diesem Ansatz gehe

    – viveksinghggits

    11. Juli 2016 um 12:25 Uhr

  • @viveksinghggits Der Code implementiert onpaste in Browsern, die es nicht bereits bieten. Du sagst “Ich kann Benutzer daran hindern, etwas einzufügen” aber In welchen Browsern hast du das getestet?

    – AnnanFay

    9. November 2016 um 15:02 Uhr


  • In Bezug auf die Implementierung sehe ich zwei offensichtliche Verbesserungen: 1) Führen Sie den Code nur in Browsern aus, in denen OnPaste ihn nicht bereits unterstützt, 2) erneut ausführen, wenn das DOM geändert wird – derzeit wird es nicht auf dynamisch hinzugefügte Eingaben angewendet.

    – AnnanFay

    9. November 2016 um 15:10 Uhr


  • @McAuley Na und? Es ist viel, viel schlimmer, das Einfügen zu verhindern, insbesondere für etwas, das wahrscheinlich langwierig ist, wie ein Textbereich. Ich würde dieses Formular wahrscheinlich überhaupt nicht ausfüllen, wenn ich es einfügen müsste und es nicht könnte. Wenn ich unbedingt müsste, wäre der Inhalt knapp und unvollständig und wahrscheinlich unhöflich. Sie möchten sich nicht mit einem Support-Anruf auseinandersetzen, weil die Formatierung nicht erhalten wurde? Ich bezweifle, dass das sehr oft vorkommt, und es straft Ihre Faulheit Lügen. Vermasseln Sie ein paar Benutzer, um etwas Arbeit zu vermeiden. Hübsch.

    – Rick

    11. November 2018 um 21:25 Uhr

Deaktivieren Sie das Einfugen von Text in das HTML Formular
Kailas

Ich habe das gerade bekommen, wir können es erreichen, indem wir es verwenden onpaste:"return false"Dank an: http://sumtips.com/2011/11/prevent-copy-cut-paste-text-field.html

Wir haben verschiedene andere Optionen, die unten aufgeführt sind.

<input type="text" onselectstart="return false" onpaste="return false;" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false" autocomplete=off/><br>

Sie können … aber nicht.

Sie sollten das Standardverhalten eines Benutzerbrowsers nicht ändern. Es ist wirklich eine schlechte Benutzerfreundlichkeit für Ihre Webanwendung. Auch wenn ein Benutzer diesen Hack deaktivieren möchte, kann er einfach Javascript in seinem Browser deaktivieren.

Fügen Sie diese Attribute einfach dem Textfeld hinzu

ondragstart=”return false” onselectstart=”return false”

  • Die Frage betrifft das Deaktivieren des Einfügens. diese Technik würde nur das Kopieren erschweren und das Einfügen überhaupt nicht bewirken.

    – Biegemann

    2. Juli 2013 um 17:51 Uhr

1646026515 252 Deaktivieren Sie das Einfugen von Text in das HTML Formular
Josh Lee

Verrückte Idee: Fordern Sie den Benutzer auf, Ihnen im Rahmen des Anmeldevorgangs eine E-Mail zu senden. Dies wäre natürlich unpraktisch, wenn das Klicken auf einen Mailto-Link nicht funktioniert (wenn sie beispielsweise Webmail verwenden), aber ich sehe es als eine Möglichkeit, gleichzeitig Tippfehler zu vermeiden und die E-Mail-Adresse zu bestätigen.

Es würde so gehen: Sie füllen den größten Teil des Formulars aus, geben ihren Namen, ihr Passwort und so weiter ein. Wenn sie auf Senden drücken, klicken sie tatsächlich auf einen Link, um E-Mails an Ihren Server zu senden. Sie haben ihre anderen Informationen bereits gespeichert, daher enthält die Nachricht nur ein Token, das besagt, für welches Konto dies gilt.

  • Die Frage betrifft das Deaktivieren des Einfügens. diese Technik würde nur das Kopieren erschweren und das Einfügen überhaupt nicht bewirken.

    – Biegemann

    2. Juli 2013 um 17:51 Uhr

1646026515 108 Deaktivieren Sie das Einfugen von Text in das HTML Formular
Richard Lukas

Wie wäre es, wenn Sie eine Bestätigungs-E-Mail an die E-Mail-Adresse senden, die der Benutzer gerade zweimal eingegeben hat, in der sich ein Link zu einer Bestätigungs-URL auf Ihrer Website befindet, dann wissen Sie, dass er die Nachricht erhalten hat?

Wer den Empfang der E-Mail nicht mit einem Klick bestätigt, hat möglicherweise seine E-Mail-Adresse falsch eingegeben.

Keine perfekte Lösung, aber nur einige Ideen.

  • Ich habe diese Implementierung derzeit. Das Problem ist, dass der Benutzer glaubt, dass er die E-Mail aufgrund eines Fehlers auf unserer Seite nicht erhält, weil er seine E-Mail-Adresse überprüft hat Überlegen Sie sind eingetreten und haben keine E-Mail. Wenn sie versuchen, sich erneut zu registrieren, ist der verwendete Benutzername jetzt nicht verfügbar, da er mit dieser falschen E-Mail-Adresse hängen bleibt.

    – justinl

    4. August 2009 um 13:07 Uhr

  • Fügen Sie vielleicht einen Workflow / Code hinzu, der jeden Tag Benutzernamen bereinigt, die seit etwa 2 Tagen nicht bestätigt wurden.

    – Colin

    4. August 2009 um 13:14 Uhr

  • Danke für den Kommentar. Meine Gedanken wären, wenn Sie versuchen, ein Konto auf einer Website zu erstellen, und es heißt, dass Ihr Benutzername vergeben ist, würden Sie in 2 Tagen noch einmal zurückgehen und es erneut versuchen? Meine Gedanken sind höchstwahrscheinlich nicht. Entweder haben Sie am selben Tag ein neues Konto mit einem anderen Benutzernamen erstellt oder Sie haben sich nicht die Mühe gemacht, auf die Website zurückzukehren, weil Sie nicht herausgefunden haben, wie Sie sich registrieren müssen, und die Website “zu kompliziert” war.

    – justinl

    4. August 2009 um 13:17 Uhr

  • Um mit dem fortzufahren, was Colin sagt, Sie könnten möglicherweise davon ausgehen, dass es wahrscheinlich in Ordnung ist, wenn jemand versucht, sich mit demselben Benutzernamen und einer anderen E-Mail-Adresse erneut zu registrieren, und er nicht auf die Bestätigungsnachricht geantwortet hat, dies tun zu lassen. Sie stellen möglicherweise fest, dass Benutzer ihre Domain in ihren E-Mails korrekt angeben, aber ihren Benutzernamen falsch schreiben, und könnten dies verwenden, um weiter festzustellen, ob jemand einen Fehler gemacht hat?

    – Richard Lukas

    4. August 2009 um 13:18 Uhr

  • Ich mag diese Idee sehr, Benutzern die Möglichkeit zu geben, sich erneut zu registrieren, wenn sie ihre Kontoinformationen noch nicht bestätigt haben. Ich denke, diese Designlösung ist besser als meine ursprünglich vorgeschlagene technische Lösung. Von allen anderen zu hören, dass das Ändern dieser Standardbrowserfunktion eine schlechte Idee sei, war das, was ich hören musste, um eine bessere Lösung zu finden.

    – justinl

    4. August 2009 um 14:47 Uhr

884720cookie-checkDeaktivieren Sie das Einfügen von Text in das HTML-Formular

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

Privacy policy