2011-10-15 28 views
0

我做了一個匿名函數內部的標籤觸發功能,那就是:JavaScript對象在匿名函數變量觸發器

(function(){ 
    var getElement = { 
    getElem: function(element , elemInterval){ 
     if(document.getElementsByTagName('div')[0].onload){ 
     element = document.getElementsByTagName('div')[0]; 
     clearInterval(elemInterval); 
     element.innerHTML = ' content changed. '; 
     } 
    } 
    } 
    var element , elemInterval; 
    elemInterval = setInterval(getElement.getElem(element , elemInterval) , 1000); 
})(); 

它所要做的就是調用函數儘可能多的時間,因爲它需要每一秒鐘,並檢查第一個div是否已加載,比將元素端口保存到「element」var並更改div的內容。

這似乎不起作用,這裏有什麼問題?

回答

1

你直接調用它和結果值傳遞給setInterval,這是undefined

你可能想傳遞的是功能setInterval,這反過來將調用什麼getElem

elemInterval = setInterval(function() { 
           getElement.getElem(element , elemInterval); 
          }, 1000); 
+0

我已經試過了,但實際上什麼都沒做,這裏是一個活生生的例子:HTTP: //jsfiddle.net/NGnEd/ –

+0

@Mor Sela:那是因爲你的if語句。你爲什麼要檢查'onload'? http://jsfiddle.net/NGnEd/1/ – pimvdb

+0

真棒!我雖然知道如果它已經被加載,onload應該是真的,但是我想我錯了,謝謝你。 –

1

您立即調用函數並將undefined(它的返回值)作爲setInterval的第一個參數。瞭解關閉如何工作。

elemInterval = setInterval(function() { 
    getElement.getElem(element , elemInterval); 
}, 1000); 
+0

我已經試過了,但實際上什麼都沒做,這裏是一個活生生的例子:http://jsfiddle.net/NGnEd/ –

0

的問題是最有可能的範圍 - 在中的getElem功能包含在一個變種,它包含在功能塊中(它也有自己的範圍)。區間函數需要在全局範圍內可訪問。

我不能現在來測試這個權利,但IIRC,這會工作:

var something = (function(){ 
    var getElement = { 
    getElem: function(element , elemInterval){ 
     if(document.getElementsByTagName('div')[0].onload){ 
     element = document.getElementsByTagName('div')[0]; 
     clearInterval(elemInterval); 
     element.innerHTML = ' content changed. '; 
     } 
    } 
    } 
    var element , elemInterval; 
    elemInterval = setInterval(something.getElement.getElem(element , elemInterval) , 1000); 
    return getElement; 
})(); 

但是,這是一個間接的水平高,你可能想避免含在另一個嵌套函數的功能。

+0

爲什麼你最終返回這個對象? –

+0

,因爲這是被指定爲「無功的東西」 - 沒有回報,一些包含了函數的定義,而不是與方法的getElem的getElement對象。 – fwielstra