J'aimerais que tous les événements soient déclenchés par un champ de saisie lorsqu'un utilisateur interagit avec lui. Cela inclut des choses comme:
- En cliquant dessus.
- En cliquant dessus.
- Taper dedans.
- Tabing loin d'elle.
- Ctrl+C et Ctrl+V sur le clavier.
- Clic droit -> Coller.
- Clic droit -> Couper.
- Clic droit -> Copier.
- Glisser-déposer du texte depuis une autre application.
- Le modifier avec Javascript.
- Le modifier avec un outil de débogage, comme Firebug.
J'aimerais l'afficher en utilisant console.log
. Est-ce possible en Javascript/jQuery, et si oui, comment puis-je le faire?
$(element).on("click mousedown mouseup focus blur keydown change",function(e){
console.log(e);
});
Cela vous donnera beaucoup d'informations (mais pas toutes) sur le déclenchement d'un événement ... mis à part le coder manuellement de la sorte, je ne vois pas d'autre moyen de le faire.
Je ne sais pas pourquoi personne ne l'utilise ... (peut-être parce que c'est un truc Webkit)
Console ouverte:
monitorEvents(document.body); // logs all events on the body
monitorEvents(document.body, 'mouse'); // logs mouse events on the body
monitorEvents(document.body.querySelectorAll('input')); // logs all events on inputs
Il existe un moyen générique de Nice utilisant la collection .data ('events'):
function getEventsList($obj) {
var ev = new Array(),
events = $obj.data('events'),
i;
for(i in events) { ev.Push(i); }
return ev.join(' ');
}
$obj.on(getEventsList($obj), function(e) {
console.log(e);
});
Cela enregistre chaque événement qui a déjà été lié à l'élément par jQuery au moment où cet événement spécifique est déclenché. Ce code m'a été très utile à de nombreuses reprises.
Btw: Si vous voulez voir tous les événements possibles déclenchés sur un objet, utilisez firebug: faites un clic droit sur l’élément DOM de l’onglet html et cochez la case "Enregistrer les événements". Chaque événement est ensuite enregistré sur la console (c'est parfois un peu gênant car il enregistre chaque mouvement de souris ...).
$('body').on("click mousedown mouseup focus blur keydown change mouseup click dblclick mousemove mouseover mouseout mousewheel keydown keyup keypress textInput touchstart touchmove touchend touchcancel resize scroll zoom focus blur select change submit reset",function(e){
console.log(e);
});
Je sais que la réponse a déjà été acceptée, mais je pense qu’il existe peut-être un moyen un peu plus fiable de ne pas nécessairement connaître le nom de l’événement à l’avance. Cela ne fonctionne que pour les événements natifs, pour autant que je sache, pas ceux personnalisés qui ont été créés par des plugins. J'ai choisi de ne pas utiliser jQuery pour simplifier un peu les choses.
let input = document.getElementById('inputId');
Object.getOwnPropertyNames(input)
.filter(key => key.slice(0, 2) === 'on')
.map(key => key.slice(2))
.forEach(eventName => {
input.addEventListener(eventName, event => {
console.log(event.type);
console.log(event);
});
});
J'espère que cela aide tous ceux qui lisent ceci.
MODIFIER
J'ai donc vu une autre question ici qui était similaire, donc une autre suggestion serait de procéder comme suit:
monitorEvents(document.getElementById('inputId'));
Vieux fil, je sais. J'avais aussi besoin de quelque chose pour surveiller les événements et j'ai écrit cette solution très pratique (excellente). Vous pouvez surveiller tous les événements avec ce hook (dans la programmation Windows, cela s'appelle un hook). Ce raccordement n'affecte pas le fonctionnement de votre logiciel/programme.
Dans le journal console, vous pouvez voir quelque chose comme ceci:
Explication de ce que vous voyez:
Le journal de la console affiche tous les événements que vous sélectionnez (voir ci-dessous "comment utiliser") et indique le type d'objet, le nom de la classe, l'identifiant, <: nom de la fonction>, <: nom de l'événement > . La mise en forme des objets est de type css.
Lorsque vous cliquez sur un bouton ou sur un événement lié, vous le verrez dans le journal de la console.
Le code que j'ai écrit:
function setJQueryEventHandlersDebugHooks(bMonTrigger, bMonOn, bMonOff)
{
jQuery.fn.___getHookName___ = function()
{
// First, get object name
var sName = new String( this[0].constructor ),
i = sName.indexOf(' ');
sName = sName.substr( i, sName.indexOf('(')-i );
// Classname can be more than one, add class points to all
if( typeof this[0].className === 'string' )
{
var sClasses = this[0].className.split(' ');
sClasses[0]='.'+sClasses[0];
sClasses = sClasses.join('.');
sName+=sClasses;
}
// Get id if there is one
sName+=(this[0].id)?('#'+this[0].id):'';
return sName;
};
var bTrigger = (typeof bMonTrigger !== "undefined")?bMonTrigger:true,
bOn = (typeof bMonOn !== "undefined")?bMonOn:true,
bOff = (typeof bMonOff !== "undefined")?bMonOff:true,
fTriggerInherited = jQuery.fn.trigger,
fOnInherited = jQuery.fn.on,
fOffInherited = jQuery.fn.off;
if( bTrigger )
{
jQuery.fn.trigger = function()
{
console.log( this.___getHookName___()+':trigger('+arguments[0]+')' );
return fTriggerInherited.apply(this,arguments);
};
}
if( bOn )
{
jQuery.fn.on = function()
{
if( !this[0].__hooked__ )
{
this[0].__hooked__ = true; // avoids infinite loop!
console.log( this.___getHookName___()+':on('+arguments[0]+') - binded' );
$(this).on( arguments[0], function(e)
{
console.log( $(this).___getHookName___()+':'+e.type );
});
}
var uResult = fOnInherited.apply(this,arguments);
this[0].__hooked__ = false; // reset for another event
return uResult;
};
}
if( bOff )
{
jQuery.fn.off = function()
{
if( !this[0].__unhooked__ )
{
this[0].__unhooked__ = true; // avoids infinite loop!
console.log( this.___getHookName___()+':off('+arguments[0]+') - unbinded' );
$(this).off( arguments[0] );
}
var uResult = fOffInherited.apply(this,arguments);
this[0].__unhooked__ = false; // reset for another event
return uResult;
};
}
}
Exemples d'utilisation:
Surveiller tous les événements: _
setJQueryEventHandlersDebugHooks();
Surveille tous les déclencheurs uniquement:
setJQueryEventHandlersDebugHooks(true,false,false);
Surveille tous les événements ON: :
setJQueryEventHandlersDebugHooks(false,true,false);
Surveiller tous les OFF non liés uniquement:
setJQueryEventHandlersDebugHooks(false,false,true);
Remarques/Avis:
J'espère que ça aide! ;-)
https://github.com/robertleeplummerjr/wiretap.js
new Wiretap({
add: function() {
//fire when an event is bound to element
},
before: function() {
//fire just before an event executes, arguments are automatic
},
after: function() {
//fire just after an event executes, arguments are automatic
}
});
Il suffit d’ajouter ceci à la page et aucun autre souci ne gèrera le repos pour vous:
$('input').live('click mousedown mouseup focus keydown change blur', function(e) {
console.log(e);
});
Vous pouvez également utiliser console.log ('Input event:' + e.type) pour le simplifier.