- From: Robin Berjon <robin@w3.org>
- Date: Tue, 21 May 2013 16:28:34 +0200
- To: Michaël Rouges <michael.rouges@gmail.com>
- CC: public-html@w3.org
Hi Michaël,
On 18/05/2013 12:03 , Michaël Rouges wrote:
> The idea is being able to add events to a collection of nodes, existing
> and future, for a given selector.
This is definitely a useful feature. That said, are you aware of event
delegation? See for instance:
http://davidwalsh.name/event-delegate
The most common use that I know of this is jQuery's on() method, which
can also accept selectors in order to filter nodes:
http://api.jquery.com/on/
> This would avoid costly solutions like this:
>
> (function () {
> var catchClickOnAnchors;
> catchClickOnAnchors = function(event){
> var anchors, iterator, length;
> anchors = document.getElementsByTagName('a');
> for (; iterator < length; iterator += 1) {
> anchors[iterator].addEventListener('click', function (event) {
> console.log('Caught click');
> event.preventDefault();
> event.returnValue = false;
> return false;
> }, false);
> }
> };
> catchClickOnAnchors();
> document.addEventListener('DOMSubtreeModified',
> catchClickOnAnchors, false);
> }());
Yes, you *definitely* don't want to do that. For the case you exemplify,
you can listen for click events on the <body> element, and filter just
those that are on <a> elements.
You also definitely don't want to be using DOMSubtreeModified. It's slow
and poorly supported.
It's quite possible that some of the new HTML5 events don't support
bubbling when they should — and we should triple-check the list — but I
don't believe that we need a new feature here beyond what we already
support.
Thanks!
--
Robin Berjon - http://berjon.com/ - @robinberjon
Received on Tuesday, 21 May 2013 14:28:48 UTC