The reason that doesn't work is that the $(theFunction) code has already
saved a reference to the actual function object for theFunction. When you
later replace the *name* theFunction with a different function object, it
has no effect on that existing reference. It still points to the original
function.

BTW, a simpler way to say window['theFunction'] is window.theFunction -
means the same thing either way.

Can you insert a script after jQuery is loaded but before the file in
question is loaded? If so, you could do something like this:

    if( $ != jQuery )
        alert( 'I made a bad assumption!' );
    $ = function( a ) {
        if( a == theFunction )
            $ = jQuery;  // ignore call and restore original $
        else
            return jQuery.apply( this, arguments );  // allow other calls
    };

Or perhaps a better way to code it is:

    (function() {
        var old$ = $;
        $ = function( a ) {
            if( a == theFunction )
                $ = old$;  // ignore call and restore original $
            else
                return old$.apply( this, arguments );  // allow other calls
        };
    })();

The second version avoids relying on the fact that $ is an alias for jQuery
- so it's a more general pattern that you could use in any similar
situation.

Either way, by loading this code before the other script, you redefine $ so
it ignores the $(theFunction) call and then restores the original $ for
efficiency.

-Mike

> From: Noel
> 
> I want to redefine a function that is being bound to 
> document.ready by someone else. Actually, I'd prefer just to 
> unbind the function, but the initial binding is in a file 
> that I don't want to change, and uses this syntax:
> 
> $(theFunction);
> 
> I understand from http://dev.jquery.com/ticket/1311#comment:3 
> that this syntax is not supported for the 'unbind from document.ready'
> functionality that was added in 1.2.2. But I'm wondering if 
> there is a way around this, for instance, to redefine the 
> function using something like:
> 
> window['theFunction'] = function () { // my definition... };
> 
> But this doesn't seem to work -- the other definition of "theFunction"
> gets executed in any case.
> 
> Is there any way to achieve what I am trying to do without 
> changing the other file?

Reply via email to