Recent Project News


I’ve just released jQuery hashchange event v1.3, which fixes all outstanding issues, most notably bringing document.title and document.domain support to IE6/7. In addition, the plugin has been unit tested with jQuery 1.2.6, 1.3.2, 1.4.1 and 1.4.2 in Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2 and BlackBerry 4.6-5, so you should find that it’s extremely reliable.

Here’s a full list of the changes in the latest version:

  • Reorganized IE6/7 Iframe code to make it more “removable” for mobile-only development.
  • Added IE6/7 document.title support.
  • Added BlackBerry support (4.6+)
  • Attempted to make Iframe as hidden as possible by using techniques suggested by the paciello group.
  • Added support for the “shortcut” format $(window).hashchange( fn ) and $(window).hashchange() like jQuery provides for built-in events.
  • Renamed jQuery.hashchangeDelay to jQuery.fn.hashchange.delay and lowered its default value to 50.
  • Added jQuery.fn.hashchange.domain and jQuery.fn.hashchange.src properties plus document-domain.html file to address access denied issues when setting document.domain in IE6/7.

As always, jQuery BBQ will be updated soon to incorporate these changes, but if you want them right now, you can just grab the hashchange event source and integrate it yourself, which is easy to do if you just look at the BBQ source.

Either way, check out jQuery hashchange event now and let me know what you think! Also, if you can, please show your appreciation for my hard work with a donation. Thanks!


If anyone is interested in trying out the latest version of the jQuery hashchange event plugin, I’d love to hear any feedback or bug reports.

New in this version are document.domain and document.title support for IE6/7, some Blackberry fixes, and an IE6/7-specific code reorganization which makes it easier for mobile-only developers to strip out that stuff (since they don’t need it).

Either way, jQuery hashchange event 1.3pre is available at the GitHub project page right now, and the only thing I’m waiting on before releasing it at this point is a bit more testing. Once it’s done, I’ll release it as 1.3 and integrate it into a new version of jQuery BBQ.


JavaScript debug has been updated to v0.4, adding a few missing passthrough console methods: exception, groupCollapsed and table. Thanks to Riccardo De Agostini for the patch!

If you’ve never used it before, this JavaScript plugin provides a simple wrapper for the console’s logging methods, and was created to allow a very lightweight, easy-to-use, cross-browser logging solution that doesn’t require excessive or unwieldy object detection. In addition, there’s a convenient bookmarklet which adds Firebug lite compatibility.

Find out more information on the project page, and give it a try!


jQuery queueFn is a very small plugin that allows you to queue any jQuery method or arbitrary function to execute, in order, in the animation queue.

This is especially useful for when you want to add a class to an element while animating or remove an element after fading out. Of course, this plugin can be used to queue pretty much anything along with animations, so have fun!

Check jQuery queueFn out now, and if you have any comments or suggestions, let me know, thanks!


I just fixed a minor bug in jQuery equalizeBottoms where internal padding and border would adversely affect proper bottom-equalization, and released an update.

In case you don’t know, jQuery equalizeBottoms allows you to “equalize” the bottoms of multiple elements, making columns heights even, even when CSS refuses to help.

So if you haven’t done so already, check out the plugin now, and let me know what you think!


With jQuery outside events you can bind to an event that will be triggered only when a specific “originating” event occurs outside the element in question. For example, you can click outside, double-click outside, mouse-over outside, focus outside (and over ten more default “outside” events). Also, if an outside event hasn’t been provided by default, you can easily define your own.

Note that this was previously known as the “jQuery clickoutside” plugin.. but, hey—it’s pretty amazing what a an awesome idea and few more lines of code can do!

Visit the project page now for the complete list of “outside” events, documentation and working examples!


Recently, while working on another plugin for which jQuery resize event is an optional dependency, I noticed an odd behavior, so I investigated. It turns out that a minor bug that was causing the event to trigger immediately after bind in some circumstances.. so I fixed it, and threw in a few minor performance optimizations as well.

If you’re currently using the plugin, you should update it. It’s not a critical bug though, and since nobody reported it to me it’s either a) just not a big deal, or b) an indicator that nobody is actually using this plugin.

Either way, for the latest version, visit the project page now!


While this plugin was initially one of my jQuery Misc plugins, it seemed useful enough to “promote” to its own project page. Congratulations jQuery throttle / debounce, you’ve “made it big!”

That being said, jQuery throttle / debounce allows you to rate-limit your functions in multiple useful ways. Passing a delay and callback to $.throttle returns a new function that will execute no more than once every delay milliseconds. Passing a delay and callback to $.debounce returns a new function that will execute only once, coalescing multiple sequential calls into a single execution at either the very beginning or end.

Just take a look at the project page to see more explanations (both textual and visual), documentation and working examples!

If you have any feedback or suggestions, please leave them in the comments, and if you find this plugin useful, please donate!


I haven’t had a reason to update jQuery doTimeout in a long time, mainly because nobody has had any suggestions on how to improve it.. until last night, when Brandon Aaron suggested that, “hey, wouldn’t be great if doTimeout could be called like this: $('div').show().doTimeout( 2000, 'hide' ), passing a string jQuery method name instead of a function reference?”

Well, it seemed like a great idea to me, so I took a look at the plugin, spent about fifteen minutes adding four lines of code.. and then spent another few hours updating documentation, examples, and unit tests.

The end result is version 1.0, which makes it even easier for people to delay execution of their jQuery methods. Just take a look at the first hover intent example to get an idea of how easy it is now!


With jQuery clickoutside event you can bind an event that will be triggered only when the user clicks outside the element in question. And because a reference to the clicked element is available as you can change behavior based on what element is clicked.

This a fairly simple example of a jQuery “special event” plugin, so if you want to write one of your own, feel free to take a look at the fully commented source code. If you just want to, like, actually use the plugin, check out the project page!


This jQuery BBQ release incorporates the recently-updated jQuery hashchange event v1.2 which fixed a bizarre bug in Safari, and a few other miscellaneous things:

  • The IE6/7 Iframe is now inserted after the body (this actually works), which prevents the page from scrolling when the event is first bound.
  • The event can also now be bound before DOM ready, but it won’t be usable before then in IE6/7. Meaning: you can do it, but be warned!

In addition, I:

  • Added the $.param.fragment.noEscape method, which allows designating characters to not be urlencoded in the hash, which can result in prettier-looking URLs.
  • Reworked the hashchange event internal “add” method to be compatible with changes made to the jQuery 1.4.2 special events API.
  • Unit-tested the plugin in jQuery 1.3.2, 1.4.1, and 1.4.2… and everything works!

Also, since the special events API in jQuery 1.4.2 has been reworked (fixing some serious issues), I recommend that you update to jQuery 1.4.2 as soon as possible. Keep in mind that jQuery BBQ prior to v1.2.1 will not be fully compatible with jQuery 1.4.2, because of the aforementioned API changes, so I recommend upgrading both BBQ and jQuery to the latest versions!

So, what are you waiting for, get the latest and greatest now!

Note: this post was originally for BBQ v1.2, but since it’s only been a few hours and I’ve already released BBQ v1.2.1, I’m just going to edit this existing post and hope that nobody notices. Except that I’m explicitly commenting about it in the post. Damn, you’ve found me out.


This morning, I decided to actually collect many of the little jQuery plugins I’ve created, that are too small for their own pages, into a single jQuery Misc plugins page. I’ll add more as they’re created, but here’s the current list:

Each plugin has both a full and minified version, along with a brief explanation and a small code sample, so check them out now!


I’ve just updated jQuery hashchange event to fix a bizarre bug in Safari. Apparently references to window.location become stale when pressing the back button from a page on another domain.

Of course, this broke the plugin for the one person who was doing this (thanks for the tip, Chris), but it’s now fixed, along with WebKit Bugzilla bug 34679 filed, and a few other miscellaneous things:

  • The IE6/7 Iframe is now inserted after the body (this actually works), which prevents the page from scrolling when the event is first bound.
  • The event can also now be bound before DOM ready, but it won’t be usable before then in IE6/7. Meaning: you can do it, but be warned!
  • The plugin is now unit-tested in jQuery 1.4.2pre, and everything works!

jQuery BBQ will be updated soon to incorporate these changes, but if you want them right now, you can just grab the hashchange event plugin!


With jQuery resize event, you can now bind resize event handlers to elements other than window, for super-awesome-resizing-greatness!

Long ago, the powers-that-be decided that the resize event would only fire on the browser’s window object. Unfortunately, that means that if you want to know when another element has resized, you need to manually test its width and height, periodically, for changes. While this plugin doesn’t do anything fancy internally to obviate that approach, the interface it provides for binding the event is exactly the same as what’s already there for window.

It’s easy to use, fun for the whole family, and will get those tough grass stains out of your favorite pair of pants, so check it out now!


jQuery Long Url, the “Uniform Resource Elongator,” uses the short URL lengthening API to expand short URLs from at least 80 services, including,, and more!

And not only has jQuery Long Url been written to take advantage of the API “batch” ability, where up to ten URLs can be lengthened per request, but it can optionally use any lengthening service, supporting any URL-per-request “batch” limitations, which minimizes the number of external requests made for faster performance.

Simplified, my Linkinus Style, utilizes an earlier, unreleased version of this plugin.. but now that it’s finally available for general consumption, consume away!

More Recent Project News