JavaScript: gebeurtenissen vastleggen ongeacht het element

  1. Is er een bestaand mechanisme waarmee ik een gebeurtenislistener kan toevoegen om te 'focussen' op alle DOM-elementen op de pagina met deze gebeurtenis? Zo nee, hoe kan ik dat doen?

  2. Ik wil console.log (iets) graag wanneer een DOM-element een evenement activeert. Hoe kan ik dit doen?

EDIT: zonder kader:)

0

4 antwoord

U kunt de gebeurtenis binden aan het hoofd- of html-element. Of een ander element dat al uw HTML bevat.

Of als u jQuery wilt gebruiken, kunt u zoiets doen

$("*").bind("focus", function(e){
    console.log("something");
})
1
toegevoegd
De focusgebeurtenis binden aan "elk" element op de pagina ???
toegevoegd de auteur Juri, de bron
Juist, je zou $ (document) kunnen doen, maar het OP specificeerde zijn behoefte niet. Ik weet dat $ ("*") veel langzamer is, maar het klonk bijna alsof hij moest inloggen op elementspecifieke basis.
toegevoegd de auteur Keith.Abramo, de bron

Zoiets zou moeten werken (met jQuery).

$("input").focus(function(){
   console.log($(this).attr("id"));
});

Here's a live example: http://jsbin.com/ipiciz/edit#javascript,html,live

0
toegevoegd

Je zou kunnen proberen de pseudo-selector : input te gebruiken in jQuery.

$(':input').focus(function(e){
    console.log(e);
});

Dit wordt alleen gekoppeld aan de invoerelementen, wat waarschijnlijk toch is waarnaar u op zoek bent.

0
toegevoegd

Gebeurtenissen "borrelen" omhoog door de DOM, dus je zou in staat moeten zijn om een ​​luisteraar te binden aan een document, lichaam, html of een ander ouderelement (bijvoorbeeld een div) en te luisteren naar elke gebeurtenis die wordt geactiveerd door elementen die het bevat.

Als u bijvoorbeeld jQuery gebruikt, kunt u dit als volgt doen:

$(document).bind('focus', function(e) { console.log(e); });

Hiermee wordt elke focusgebeurtenis geregistreerd, ongeacht welk element de gebeurtenis aanvankelijk triggert.

0
toegevoegd
... tenzij de bubbel wordt geannuleerd.
toegevoegd de auteur Richard JP Le Guen, de bron
Het probleem met deze bewering is dat bepaalde gebeurtenissen ( onfocus die er één van zijn) niet bubbelen (in IE). Je kunt niet generaliseren. Elk evenement is speciaal.
toegevoegd de auteur user1385191, de bron