The Life and Times of Michael Shadle

Blog | Projects | Netflix

jQuery's no-conflict mode: Yet another reason why it's the best
Tuesday, July 3rd, 2007 at 3:29 pm

It took me a bit to find out why jQuery (now bundled with WordPress) was not working as I expected inside of the WP admin area. The script was being called, but my code like $("#foo") was not working. I really had no clue where to begin, since it still has all those old JS libraries/frameworks being called as well. It was due to Prototype being packaged with it and conflicting with the "$" shortcut.

Long story short, jQuery already planned for library conflicts and has a quick solution. The no-conflict mode allows you to define your own shortcut, and of course it works like a charm.

It's easy to do - just put this line in your code somewhere:

var J = jQuery.noConflict();

Now $("#foo") will be J("#foo") and it will not conflict with any other libraries that may be installed. I hope WP gets rid of all the other stuff and goes with pure jQuery and plugins soon enough though :)

This entry was posted and is filed under Development, WordPress. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

15 Responses to "jQuery's no-conflict mode: Yet another reason why it's the best"

  1. On July 29th, 2007 at 1:56 pm, Around the web | alexking.org says:

    [...] jQuery’s no-conflict mode: Yet another reason why it’s the best - I’m sold, been loving jQuery so far. [...]

  2. On September 1st, 2007 at 4:23 pm, low says:

    excellent solution! worked like a charm! thank you!

  3. On June 11th, 2008 at 8:56 pm, mike says:

    Can I see your html, I don't understand where to put it. I am not to good with javascript.
    Thanks

  4. On November 7th, 2008 at 1:17 pm, David Morón says:

    This also fixes the issue between lightbox2 and jQuery Multi Level CSS Menu #2...

    Genious

  5. On November 8th, 2008 at 12:56 pm, hubba says:

    THIS ROCKS! I been starring at my wordpress theme code for days.. I know it must be some conflict going on there.. and YOU .. YOU GAVE ME THE ANSWER! this is so awesome!

  6. On November 19th, 2008 at 11:52 pm, mei says:

    Sorry for being stupid. But I tried the noConflict() function. I placed it RIGHT AFTER jQuery.js is called, but BEFORE prototype is called. In between these two, I had other UI libraries being called as well. I assigned jQuery to new var $j, and I changed the call in my function (which is called after all the libraries) to refer to $j instead of $, it still doesn't work.

    It looks like my UI libraries functions are now broken (from the error I am getting like "the.style" is null or not an object).

    Can you please help?? Thanks so much in advance!

  7. On November 20th, 2008 at 12:09 am, mike says:

    Honestly, I don't think I can help. I got lucky with this a while ago, and I simply done have the mental patience to try and work with it again... sorry :)

  8. On February 2nd, 2009 at 2:51 am, Dhaval Patel says:

    Thanks for this great solution.
    But I have one problem with this.
    I am using "jquery.blockUI.js" also.
    I have put "var JQ = jQuery.noConflict();"
    I changed all "$" with "JQ" in "jquery.blockUI.js"
    but as I use "JQ.blockUI({.......});", I am getting the javascript error that "JQ.blockUI is not a function"...

    So what should I do to make working ?

  9. On February 2nd, 2009 at 11:10 am, mike says:

    I don't know... I'd try the author of blockUI :)

  10. On March 5th, 2009 at 10:46 pm, porkproductpete says:

    okay, so i'm running proto/jquery together and it works fine on Safari and FF with out having to add jQuery.noConflict(); but it won't work on IE6/7... separately both scripts work fine in IE6/7. When I open my page in IE6/7 the jquey.js works but the proto/scriptac opens my lightbox in a new page... I tried the jQuery.noConflict(); fix with no results. I'm not sure if i'm implementing it properly...i'm new to this and eager to learn. I also tried moving jquery script above the proto script recommended on other sites and nothing.
    here is the code i need help with. help me obe wan you're my only hope...
    here is the code i need help with.

    var GB_ANIMATION = true;
    $(document).ready(function(){
    $("a.greybox").click(function(){
    var t = this.title || $(this).text() || this.href;
    GB_show(t,this.href,420,450); return false;
    });
    });

  11. On March 5th, 2009 at 10:48 pm, porkproductpete says:

    sorry. here is the entire code
    okay, so i'm running proto/jquery together and it works fine on Safari and FF with out having to add jQuery.noConflict(); but it won't work on IE6/7... separately both scripts work fine in IE6/7. When I open my page in IE6/7 the jquey.js works but the proto/scriptac opens my lightbox in a new page... I tried the jQuery.noConflict(); fix with no results. I'm not sure if i'm implementing it properly...i'm new to this and eager to learn. I also tried moving jquery script above the proto script recommended on other sites and nothing.
    here is the code i need help with. help me obe wan you're my only hope...
    here is the code i need help with.

    var GB_ANIMATION = true;
    $(document).ready(function(){
    $("a.greybox").click(function(){
    var t = this.title || $(this).text() || this.href;
    GB_show(t,this.href,420,450); return false;
    });
    });

  12. On March 5th, 2009 at 10:49 pm, porkproductpete says:

    var GB_ANIMATION = true;
    $(document).ready(function(){
    $("a.greybox").click(function(){
    var t = this.title || $(this).text() || this.href;
    GB_show(t,this.href,420,450); return false;
    });
    });

  13. On March 5th, 2009 at 11:51 pm, mike says:

    Sorry dude, but I've got too much on my plate right now to be able to help. I haven't touched this code in a long time.

    You should try #jQuery on irc.freenode.net ...

  14. On May 12th, 2009 at 7:01 am, meneerbroekhuis says:

    Worked like a charm with mootools and jquery conflict in joomla. I couldn't get virtuemart working, but by simply adding your code "var J = jQuery.noConflict();" all problems disappeared! Many Thanks

  15. On June 14th, 2009 at 5:56 am, klaus says:

    i've benn sitting in front of this problem for hours. i knew that there was a conflict, but i couldnt get it to work, since I read this article.
    thank you very much

Comment on this post:

Entries (RSS) and Comments (RSS). 14 queries. 0.190 seconds.