Implement MooTools’ Elements.addEvent in jQuery

One thing that I've always disliked about the jQuery JavaScript framework is its syntax for adding event listeners to elements. The way to add a click event to an element using jQuery is:

$('#myElement').click(function() {
	//do work
});

I love OOP so the above code tells me that a click is being triggered, not that it's going to add a listener to the element. There's nothing wrong with jQuery using that syntax; I simply don't prefer it. What I do when I need to work with jQuery is Moo-ify its syntax when I can. Here's how you can implement MooTools' "addEvent" syntax in MooTools.

The jQuery JavaScript

jQuery.fn.addEvent = jQuery.fn.bind; //updated

We add the "addEvent" function to the jQuery.fn object. Pretty simple.

The Usage

$(document).ready(function() {
	$('#myElement').addEvent('click',function(){ alert('w00t'); });
});

Looks a lot like MooTools, no? If you like jQuery's syntax of .click() type events, read my post: Implementing jQuery-Like Event Syntax in MooTools


Comments

  1. Pierre

    More concise :

    jQuery.fn.addEvent = jQuery.fn.bind;

  2. David Walsh

    Well put Pierre…well put.

  3. rpflo

    I too prefer verbs like el.setStyle v. el.css. But swapping syntax would totally goof me up!

  4. Corey Worrell

    I don’t get it, why not just use


    $('#myelement').bind('click', function() {...});

    It’s even shorter than ‘addEvent’

  5. David Radcliffe

    I agree with Corey, $().bind is exactly what you’re looking for…

  6. Bo Hunter

    I would have to agree, this is nothing more than an alias.

  7. Jeff Kee

    Mysteriously enough in jQuery version 1.4 I get this:

    $(“#website_stock”).addEvent is not a function

    When I set it as just click(fn) it works in Firefox, but not in IE8. It doesn’t return any errors – just the functions do NOT run whatsoever. Same with the bind() option – works in FF on mac, not on IE8.


Be Heard!

Share your thoughts without being a jerk! And wrap your code in <code> tags, f00!

Name*:
Email*:
Website: