web-dev-qa-db-fra.com

Comment gérez-vous oncut, oncopy et onpaste dans jQuery?

La documentation jQuery indique que la bibliothèque a un support intégré pour les événements suivants: flou, focus, chargement, redimensionnement, défilement, déchargement, clic, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter , quitter la souris, modifier, sélectionner, soumettre, appuyer sur la touche, appuyer sur la touche, la touche et l'erreur.

J'ai besoin de gérer les événements couper, copier et coller. Comment le faire au mieux? FWIW, je n'ai qu'à me soucier de WebKit (chanceux!).

MISE À JOUR: Je travaille sur un "widget" dans un environnement de type tableau de bord. Il utilise WebKit, il importe donc vraiment (pour mes besoins) que ces événements y soient pris en charge, ce à quoi il ressemble.

65
Andrew Hedges

Vous pouvez ajouter et supprimer des événements de toute nature en utilisant les méthodes .on() et off()

Essayez ceci, par exemple

jQuery(document).on('paste', function(e){ alert('pasting!') });

jQuery est en fait assez indifférent à savoir si le type d'événement que vous attribuez est pris en charge par le navigateur, vous pouvez donc attribuer des types d'événements arbitraires à des éléments (et des objets généraux) tels que:

jQuery('p').on('foobar2000', function(e){ alert(e.type); });

Dans le cas de types d'événements personnalisés, vous devez .trigger() les "manuellement" dans votre code, comme ceci:

jQuery('p').trigger('foobar2000');

Neat hein?

De plus, pour travailler avec des événements DOM propriétaires/personnalisés de manière compatible avec plusieurs navigateurs, vous devrez peut-être utiliser/écrire un "plugin d'événement jQuery" ... dont un exemple peut être vu dans jquery.event.wheel.js Brandon Aaron's Plugin Mousewheel

91
Már Örlygsson

Divers événements du presse-papiers sont disponibles en Javascript, bien que le support soit inégal. QuicksMode.org a grille de compatibilité et page de test . Les événements ne sont pas exposés via jQuery, vous devrez donc étendre la bibliothèque ou utiliser des événements Javascript natifs.

14
dansays

Mozilla prend en charge un événement "input" pour lequel j'ai du mal à trouver une documentation utile. À tout le moins, je sais qu'il tire sur la pâte.

   this.addEventListener('input',
    function(){//stuff here},
    false
   );
7
Josh Bush

Comme jQuery 1.7, vous pouvez utiliser bind (...) et unbind (...) méthodes pour attacher et supprimer respectivement des gestionnaires.

Voici des exemples pour aligner votre quête:

$('#someElementId').bind('paste', function(){return false;});

- celui-ci bloquera toute tentative de coller du presse-papiers dans le corps de l'élément. Vous pouvez également utiliser couper , copier et d'autres comme types d'événements (voir liens ci-dessous)

$('#someElementId').bind('copy', function(){return alert('Hey fella! Do not forget about copyrights!');});

Ainsi, dans d'autres cas, lorsque vous souhaitez supprimer ces gestionnaires, vous pouvez utiliser la méthode unbind () :

$('#someElementId').unbind('copy');

Voici quelques liens utiles:

1
Yan Pak