$.fn.pasteEvents = function( delay ) {
if (delay == undefined) delay = 20;
return $(this).each(function() {
var $el = $(this);
$el.on("paste", function() {
$el.trigger("prepaste");
setTimeout(function() { $el.trigger("postpaste"); }, delay);
});
});
};
Rufen Sie dieses Plugin für ein Element auf, dann erhalten Sie Callback-Ereignisse für vor und nach dem Einfügen.
$("#some-element").on("postpaste", function() {
// do something
}).pasteEvents();
Der `$( .. )` Aufruf ist hier redundant. Da diese Funktion zu einer Methode eines jQuery-Objekts wird, ist der Kontext offensichtlich bereits ein jQuery-Objekt, andernfalls hätte es diese Methode nicht und deren Rückgabe würde die Verkettbarkeit ermöglichen.
Ein jQuery-Objekt wird nur benötigt, wenn mit einem rohen Element gearbeitet wird, wie z. B. im Callback von `$.each`
$("#some-element") .on("postpaste", function() { /* snip */ }).pasteEvents();Da sie kurz nacheinander aufgerufen werden, spielt die Reihenfolge keine wirkliche Rolle, aber als bewährte Methode ist es am besten, die Ereignisse zu aktivieren, bevor sie gebunden werden, anstatt sie zuerst zu binden und dann zu aktivieren. Also, so etwas wie dieses
$("#some-element") .watchPasteEvents() .on("postpaste", function() { /* snip */ });$el.on("paste", function() { $el.trigger("prepaste"); setTimeout(function() { $el.trigger("postpaste"); }, delay); });Dies kann potenziell dazu führen, dass Ereignisse mehrmals auf demselben Element ausgelöst werden. Dies geschieht, wenn der Benutzer mehrere sich überschneidende jQuery-Sammlungen hat (z. B. `$('.foo')` und `$('.bar')`, und einige Elemente `class="foo bar"` haben. Dies kann behoben werden, indem eine Boolesche Variable im Datenobjekt wie folgt verwaltet wird
$.fn.watchpasteEvents = function (delay) { delay = delay || 20; return this.each(function () { var $el = $(this); if ($el.data('pasteEventsBound')) { return true; } $el .data('pasteEventsBound', true) .on('paste', function () { $el.trigger('prepaste'); setTimeout(function () { $el.trigger('postpaste'); }, delay); }); }); };Danke TeMc, das ist eine gute Verbesserung an meinem Code!
Was ist die Anwendung des Einfügeereignisses?
Dieser Code ist super !!!!!
@TC,
gut, aber 'pasteEventsBound' wird hinzugefügt (und auf 'true' gesetzt), während es nie entfernt wurde. Das funktioniert also nur einmal, bis die Seite neu geladen wird.