2012-10-14 25 views
0
$(".app-launch").on("click", function() { 
    var appId = this.id; 

    // Check if Function is running. 
    if (typeof eval('$' + appId).start == 'undefined') { 
     eval('$' + appId).start(); 
    } 
} 

eval只是讓它回來並且說$ XXXXXX沒有被定義並且終止了java腳本的執行。無論如何阻止它殺死執行和繼續?這個函數要麼啓動應用程序,要麼首先加載javascript,然後啓動應用程序,所以這個檢查用來確定javascript是否已經加載。基於Eval的啓動腳本圖

+0

你嘗試我的建議? –

回答

1

首先,停止使用eval。如果你想要動態的namable變量,使用一個對象。

然後,您可以在嘗試訪問其屬性start之前測試該對象的類型。

var objects = {}; 
var appId = "thing"; 

objects[appId] = { start: foo; } 

if (
    typeof objects[appId] !== 'undefined' && 
    typeof objects[appId].start === 'function' 
    ) { 
    objects[appId](); 
} 
+0

該示例失敗。對於這個例子來說,工作必須在引號中。事情必須是一個字符串,或者你必須像object = {thing:{start:foo}}那樣做;感謝您以這種方式展示我,我希望我以某種方式幫助您。請修復答案,我會選擇它。 – Iscariot

0

如果你想獲取一個全局變量,只需使用關聯數組語法window['$'+appId]

而且,你的代碼是打破的原因是因爲你檢查是否啓動方法的定義,而這是不存在的$ XXXXXX。在引用方法之前檢查$ XXXXXX是否存在。另外,如果未定義,則調用該方法,這沒有任何意義。

另外eval。

這是一個jsfiddle,它顯示了什麼是錯的。這裏是一個固定的version

+0

這有什麼問題? –

+0

+1是的,我想我會使用一種完全不同的方法,而不是OP如何做到這一點......但如果堅持這個代碼,這將是我該怎麼做。 – Jeff

1

試試這個

eval('$("' + appId + '"')