This is not a terribly elegant way to do it, but it does work.

$('whatever_elements').each(function(i)
        {
                var hasclick = false;

                if (this.$events && this.$events['click'])
                {
                        for (j in this.$events['click'])
                        {
                                hasclick = true;
                                break;
                        }
                }
                if (!hasclick)
                {
                        jQuery(this).click( function(e) { /* do something
else */ } );
                }
        });

It tests for the existence of the jQuery click event, and if there are any
functions subscribed to it.  Note that an unbound click event still exists,
but it has no event handlers attached (which is what the "for loop" checks).

JK

-----Original Message-----
From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of xavier
Sent: Friday, April 27, 2007 10:42 AM
To: jQuery (English)
Subject: [jQuery] How to test if an event is already bound to an object ?


Hello,

I want to add a default javascript function to all my internal links
that DON'T already have a behaviour.

If i do :

  jQuery("[EMAIL PROTECTED]/]").bind("click",function(){
    //jQuery("#main").empty().append("Loading...").load ("/test");
    jQuery("#main").load ("/xajax/"+this.pathname,{},function()
{this.style.opacity="1";}).fadeTo("slow",0.1);
    return false;
    });

(it replaces all the "normal" links by an ajax call) Then it applies
it also to links that have already a javascript event to it.

Is it possible to select only the links that don't have any event
bound to the click event ?

Thanks in advance,

Xavier


Reply via email to