2010-05-02 123 views
6

我正在寫一個應用程序在JavaScript中,無法弄清楚如何訪問我的函數中聲明的變量,在這個jQuery解析。在裏面我可以訪問全局變量,但我並不想爲這些值創建全局變量。如何在javascript中訪問當前範圍之外的變量?

基本上我想從simulationFiles變量的xml文檔中提取文件名。我檢查節點屬性是否與simName相同,並提取xml元素中的兩個字符串,我認爲這部分工作。

如何提取這些XML元素並將它們附加到局部變量?

function CsvReader(simName) { 
    this.initFileName = "somepath"; 
    this.eventsFileName = "somepath"; 
    $(simulationFiles).find('simulation').each(function() { 
     if ($(this).attr("name") == simName) { 
      initFileName += $(this).find("init").text(); 
      eventsFileName += $(this).find("events").text(); 
     } 
    }); 
} 

回答

13

CsvReader功能this不在each()回調(其中相反,它是在迭代當前元素)相同this。回調中訪問外部函數的範圍,我們需要的是能夠通過另外一個名字,您可以在外部範圍定義引用它:

function CsvReader(simName) { 
    this.initFileName = "somepath"; 
    this.eventsFileName = "somepath"; 
    var self = this; // reference to this in current scope 
    $(simulationFiles).find('simulation').each(function() { 
     if ($(this).attr("name") == simName) { 
      // access the variables using self instead of this 
      self.initFileName += $(this).find("init").text(); 
      self.eventsFileName += $(this).find("events").text(); 
     } 
    }); 
} 
+0

Thx爲快速回答,但不幸的是,這是行不通的。其實我以前也嘗試過,但在未命名的函數中,$ self被報告爲未由螢火蟲定義。 – sekmet64 2010-05-02 20:27:38

+0

它的工作原理就是這樣!對不起,當我將這個保存到一個變量後,我有一個不同的錯誤後,此函數調用,當我調試調試器顯示我$ self.initFileName是內部未定義,但實際上它工作,並且我得到了結果。 非常感謝! – sekmet64 2010-05-02 20:37:26

+0

你的'this.initFileName'和'this.eventsFileName'應該是你的函數本地還是整個頁面? Nm ...幾秒後看到你的帖子。很高興它的工作! – 2010-05-02 20:37:32

4

我做了一個working demo(我改變了它使用類,所以它可以使用HTML)。

function CsvReader(simName) { 
    this.initFileName = "somepath"; 
    this.eventsFileName = "somepath"; 
    var context = this; 
    $(simulationFiles).find('simulation').each(function() { 
     if ($(this).attr("name") == simName) { 
      context.initFileName += $(this).find("init").text(); 
      context.eventsFileName += $(this).find("events").text(); 
     } 
    }); 
} 
+0

這種方法工作得很好,thx!對不起,但調試器的小姐給我帶來了一點教導它不起作用。 – sekmet64 2010-05-02 20:43:18