Tuesday, January 31, 2012

jquery $(selector).ready() code running even if no element was matched


I am using this code to only run this js on certain pages.




$("body#action_new").ready(function() {
console.log($("body#action_new"));
console.log($("body#action_new").length);
console.log("code is running");
}



Even though body#action_new does not exist, the code is running.



the two console.logs print out:




[]
0
code is running



What gives?

1 comment:

  1. you cannot call the ready except on the document, intead you can try

    $(document).ready(function(){

    if($("#action_new").size()>0){
    console.log($("body#action_new"));
    console.log($("body#action_new").length);
    console.log("code is running");
    }

    });


    as stated by @Interrobang in the comments the .size() method internally uses .length so it is advised to use .length to avoid the additional overhead of a function call, so the above code would look like

    if($("#action_new").length )>0){

    ReplyDelete