Ich erhalte Paste Events mit $('selector').on('input', function(event) { ... });
Dann versuche ich zu testen, was eingefügt wurde und wenn die Validierung nicht besteht, lehne den Einfügen mit event.preventDefault()
ab. Zum Zeitpunkt der Ausführung der Listener-Funktion wurde der Text leider bereits eingefügt und event.preventDefault()
tut nichts.
Was ist also ein guter Weg, um Paste-Events einzufangen, und wenn das, was eingefügt wurde, nicht validiert, machen Sie das Einfügen rückgängig / verhindern Sie es?
Ich weiß, dass ich .on('paste', function(event) { ... })
verwenden kann, aber das gibt mir weder den Text, der eingefügt wurde, noch den Inhalt des Eingabeelements nach dem Einfügen, außer ich benutze setTimeout()
mit ein paar Minuten Wartezeit, und ich ' Ich möchte vermeiden, setTimeout()
zu verwenden.
Versuchen Sie, das .change-Ereignis von jquery zu verwenden.
Setzen Sie den Wert auf leer, wenn der Wert Ihre Bedingung nicht erfüllt.
Nach meinem Verständnis dürfen wir nicht zulassen, dass Daten in das Textfeld eingefügt werden, bis sie eine bestimmte Validierung bestehen. Anstatt event.preventDefault()
zu verwenden, können wir den Wert erfassen, wenn der Benutzer einen beliebigen Inhalt eingibt, indem Sie on('input')
listener verwenden und ihn für die spezifische Bedingung validieren. Wenn die Überprüfung fehlschlägt, leeren Sie den Wert des Textfelds.
(Dies ist die Problemumgehung, wenn wir weiterhin on('input')
event listener verwenden müssen)
Beispielcode (Ich verwende console.log()
zum Drucken des eingefügten Wertes):
HTML :
%Vor%JS :
%Vor%Tags und Links javascript jquery html5 javascript-events paste