2012-04-19 6 views
2

問題があります...間違っていますか?オブジェクト内のキャッシュセレクタ(jquery)

以前に変数に保存されたセレクタを使用したいと思います。アイデアは、オブジェクト内の関数内でそれを使用することです。

var escribir = { 
    obj:$('#cont'), 
    algo: function(i) { 
     escribir.obj.html(i++); 
     setTimeout('escribir.algo('+i+')',1000); 
    } 
} 

$(document).ready(
    function(){ 
    escribir.algo(0); 
    } 
); 

.... 
<div id="cont"></div> 
+0

...と問題がありますか? –

+0

問題はobj:$( '#cont')とescribir.obj.html(i ++)です。 ... – Maxpower

答えて

0

あなたがより良い形でクロージャの使用をした場合は、おそらくほうがよいと思います。

jQuery(function ($) { 

    var escribir = { 
     obj : $('#cont'), 
     algo_counter : 0, 
     algo : function() { 
      escribir.obj.html(escribir.algo_counter++); 
      setTimeout(escribir.algo, 1000); 
     } 
    }; 

    // optionally: 
    // escribir.algo_counter = 10; 

    escribir.algo(); 

} 

この方法で、あなたはsetTimeoutevalバージョンを使用していません。

+0

thanks richard ... – Maxpower

1
var escribir = { 
    obj : $('#cont'), 
    algo : function (i) { 
      | 
      V 
     escribir.obj.html(i++); 
     setTimeout(function() { escribir.algo(i) }, 1000); // Don't use `eval` 
    } 
} 

EDIT:の作業例ここhttp://jsfiddle.net/elclanrs/sQdST/

+0

これは動作しません、やり方ではありません – Maxpower

+0

関数 '** call **を' setTimeout'に渡すことはできません。 'eval'バージョンではない場合(これはええ、悪です)、関数**のリファレンス**を渡す必要があります。だからラムダでそれをラップする必要があります: 'setTimeout(function(){escribir.algo(i);}、1000);'。 –

+0

ええ、あなたは正しいです!一定! – elclanrs

0

あなたOBJescribirのメンバーであるので、あなたはescribir.objにそれを変更する必要があります。

var escribir = { 
    obj:$('#cont'), 
    algo: function(i) { 
     escribir.obj.html(i++); // without escribir.obj you will get reference error, otherwise you have a variable name obj. 
     setTimeout('escribir.algo('+i+')',1000); 
    } 
} 
+0

yes 、申し訳ありませんが質問に固定... – Maxpower

関連する問題