Search code examples
javascriptmootoolsmootools-events

How to add an event to an element just created?


How can I add an event (by Mootools) to an element just created via set("html"), and inserted through the DOM?

$(document).addEvent("domready", function(){
      $(someel).set("html", "<p class='someclass'></p>");
      $$("someclass").somefn("click", function(){...});//somefn: that add the "click" event to the <p> element

});

Solution

  • So. via event delegation, adding a single event to top most element:

    document.addEvent("domready", function(){
        $('foo').addEvents({
            'click:relay(p.someclass)': function(){
                alert('very well');
            }
        }).set("html", "<p class='someclass'>click me</p>");
    });
    

    or chaining it like so, adding events to all elements directly:

    document.addEvent("domready", function(){
        $('foo').set("html", "<p class='someclass'>click me</p>")
            .getElements('.someclass').addEvent('click', function(){
                alert('chained');
            });
    });
    

    method 1 is more performant and allows for adding/removal or matching elements without rebinding.