jQuery’s revolutionary new way of looking at web design was based on
two main things: accessing the document via CSS selectors rather than
the unwieldy DOM methods and chaining of JavaScript commands. jQuery
then continued to make event handling and Ajax interactions easier and
implemented the Easing equations to allow for slick and beautiful animations.
However, this simplicity came with a prize: developers seem to forget a few very simple techniques that allow you to write very terse and simple to understand JavaScripts that don’t rely on jQuery. Amongst others, the most powerful ones are event delegation and assigning classes to parent elements and leave the main work to CSS.
In order to add event handlers to these list items, in jQuery beginners are tempted to do a
Newer browsers have a
We read out which element has been clicked with
Read More.........
However, this simplicity came with a prize: developers seem to forget a few very simple techniques that allow you to write very terse and simple to understand JavaScripts that don’t rely on jQuery. Amongst others, the most powerful ones are event delegation and assigning classes to parent elements and leave the main work to CSS.
Event delegation
Event Delegation means that instead of applying an event handler to each of the child elements in an element, you assign one handler to the parent element and let the browser do the rest for you. Events bubble up the DOM of a document and happen on the element you want to get and each of its parent elements. That way all you have to do is to compare with the target of the event to get the one you want to access. Say you have a to-do list in your document. All the HTML you need is:<ul id="todo"> <li>Go round Mum's</li> <li>Get Liz back</li> <li>Sort life out!</li> </ul>
$('#todo li').click(function(ev){...});
or – even worse – add a class to each list item and then access these.
If you use event delegation all you need in JavaScript is:document.querySelector('#todo').addEventListener( 'click', function( ev ) { var t = ev.target; if ( t.tagName === 'LI' ) { alert( t + t.innerHTML ); ev.preventDefault(); } }, false);
querySelector
and querySelectorAll
method (see support here)
that gives you access to DOM elements via CSS selectors – something we
learned from jQuery. We use this here to access the to-do list. Then we
apply an event listener for click
to the list.We read out which element has been clicked with
ev.target
and compare its tagName
to LI
(this property is always uppercase). This means we will never execute
the rest of the code when the user for example clicks on the list
itself. We call preventDefault()
to tell the browser not to do anything – we now take over.Read More.........
No comments:
Post a Comment