As told before, you can use the event delegation :

Your "ul" element will receive all the clicks from any element inside it, (if 
the event is not stopped of course)
the ones that exists, and the ones that may be created later.
This is called "bubbling" and there is several article about this.

By using that behavior you can write this code : http://jsfiddle.net/QXsMM/6/

This is the same mechanism as the one from the jQuery Live plugin.

-- 
Clément


Le 31 janv. 2011 à 15:42, roark a écrit :

> Hi Clement,
> 
> Thanks for the quick response!
> 
> I have added the code on jsfiddle so it can be viewed here:
> http://jsfiddle.net/roark/QXsMM/5/
> 
> Thanks again for your help
> 
> On Jan 31, 4:07 pm, Clement Hallet <[email protected]> wrote:
>> Hi,
>> 
>> You can use only one listener and deals with event delegation.
>> Could you please put your code onhttp://jsfiddle.net/and i'll try to help 
>> you.
>> 
>> --
>> Clément
>> 
>> Le 31 janv. 2011 à 15:00, roark a écrit :
>> 
>>> Hi Everyone,
>> 
>>> I think I must be writing bad code here.
>> 
>>> I will load a page with a few li's with links in them. once loaded, I
>>> add events to the links
>>> [code]
>>> $$('li a').each(function(el){
>>>            el.addEvent('click',function(e){
>>>                e.stop();
>>>                //code to execute
>>>            });
>>>    });
>>> [/code]
>> 
>>> Then when I create an element dynamically I am writing the same code
>>> again:
>>> [code]
>>> var li =  new Element('li').inject($('ul.list'));
>>> var del =  new Element('a', {'class':'delete sprite',
>>> 'title':'delete'+player.name}).inject(li);
>>> //code being repeated
>>> el.addEvent('click',function(e){
>>>    e.stop();
>>>    //code to execute
>>> });
>>> [/code]
>> 
>>> It may not look like much but when I send requests the code gets long
>>> and it seems I'm duplicating code when I add the 'click' event.
>> 
>>> This seems like bad code to me, but can't think of a way to write it
>>> any more efficient
>>> Any input is greatly appreciated!

Reply via email to