2012-04-19 82 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

......和問題是什麼? – 2012-04-19 07:27:57

+0

問題是... obj:$('#cont')和escribir.obj.html(i ++);不工作... – Maxpower 2012-04-19 07:36:57

回答

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

謝謝richard ... – Maxpower 2012-04-19 07:58:56

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

編輯:這裏http://jsfiddle.net/elclanrs/sQdST/

+0

這不起作用,不是做的方式 – Maxpower 2012-04-19 07:34:39

+0

傳遞函數**調用**到'setTimeout'將不起作用。如果不是'eval'版本(這是,是的,邪惡),你將不得不傳入一個函數**引用**。所以你必須用lambda包裝:setTimeout(function(){escribir.algo(i);},1000);'。 – 2012-04-19 07:36:34

+0

是的,你是對的!固定! – elclanrs 2012-04-19 07:39:32

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

是,抱歉在問題中修復... – Maxpower 2012-04-19 08:32:21