2012-01-31 5 views
2

このコードを使用して特定のページでのみこのjsを実行しています。

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

body#action_newは存在しませんが、コードが実行されています。

2 console.logsはプリントアウト:与え

[] 
0 
code is running 

何?

答えて

7

.lengthを使用して関数呼び出しのオーバーヘッドを回避すると、上記のコードは次のようになります。

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

".size()メソッドは機能的に.lengthプロパティと同等ですが、関数呼び出しのオーバーヘッドがないため、.lengthプロパティが優先されます。 http://api.jquery.com/size/ – Interrobang

+0

@Interrobang私は誰かが私を修正することを望んでいた... – Rafay

9

以外では、.ready()を呼び出すことはできません。それ以外の場合は、未定義の動作が発生します。

.ready()メソッドは、現在のドキュメントと一致するjQueryオブジェクトに対してのみ呼び出すことができるため、セレクタは省略できます。あなたは.size()メソッドが内部.lengthを使用していますコメントで@Interrobangで述べたように、それが推奨されたようinteadあなたは

$(document).ready(function(){ 

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

}); 

を試すことができ、文書を除いreadyを呼び出すことはできません

http://api.jquery.com/ready/

関連する問題