2010-06-18 64 views
2

我是JavaScript新手,無法獲得這個小東西的工作。 (所有外部腳本,當然加載)初學者問題:Javascript中的變量

我有這樣的jQuery腳本:

$('a.Link').click(function(){ 
    autoComp('City'); 
}); 


function autoComp(strFormName) { 
    var Company = 'Adobe Apple Microsoft'.split(" "); 
    var City = 'London Paris Berlin'.split(" "); 
    $('#'+strFormName).autocomplete(strFormName) 
} 

我不能得到它的工作。我發現問題是.autocomplete後的最後一個「strFormName」。

欣賞所有我能得到的幫助。

+2

你想做什麼?什麼不行?你是否已經將它包裝到一個'.ready()'事件中,只有當完整的DOM被加載時纔會被觸發。什麼是'autocomplete',它是一個jQuery插件嗎? – 2010-06-18 10:48:16

+0

$('#'+ strFormName).autocomplete(strFormName),在這種情況下應該是$('#'+ strFormName).autocomplete(City)嗎? – Machiel 2010-06-18 10:49:23

+0

@Pekka它不應該被包裝在'ready'中,因爲它只能從'click()'事件中調用,是不是? – Skilldrick 2010-06-18 10:50:10

回答

4

您正在將實際值strFormName傳遞到自動完成器中。你可能想這樣做,而不是:

function autoComp(strFormName) { 
    var data = { 
     Company: 'Adobe Apple Microsoft'.split(" "), 
     City: 'London Paris Berlin'.split(" ") 
    }; 
    $('#'+strFormName).autocomplete(data[strFormName]); 
} 

什麼,做的就是創建一個對象(data)具有兩個屬性,CityCompany。然後,在將數組傳遞給自動完成器時,通過名稱查找屬性,使用[]語法來選擇適當的數組。

JavaScript對於如何訪問屬性非常靈活。例如,所有的這些檢索dataCity屬性:

var x = data.City; 
var x = data['City']; 
var y = "City"; var x = data[y]; 
var x = data["C" + 'i' + "t" + 'y']; 

你的想法,你可以通過在代碼字面上使用的名稱訪問屬性,或者通過索引進入物體[]並給予該屬性是一個字符串(可以是字符串文字,或者是來自變量,表達式或函數結果或字符串的字符串)。

我可能會將data的東西移出autoComp,因爲您不需要每次都重新創建它。

+2

有同樣的想法,+1,這是更清潔。 – 2010-06-18 10:51:45

+0

完美! 我知道這是與變量的東西,只是不是它是什麼。非常感謝您的詳細解釋。我喜歡這個網站! – Keat 2010-06-18 10:58:20

+1

@Andreas:LOL不用擔心,很高興幫助。 – 2010-06-18 11:01:24

3

你需要稍微改變,就像這樣:

function autoComp(strFormName) { 
    var Company = 'Adobe Apple Microsoft'.split(" "); 
    var City = 'London Paris Berlin'.split(" "); 
    $('#'+strFormName).autocomplete(strFormName == 'City' ? City : Company); 
} 

你傳遞的字符串和變量是不同的東西,你需要選擇你根據你傳遞的字符串想要的變量這裏的。另一種做一點清潔劑:

function autoComp(strFormName) { 
    var lists = { 
    Company: 'Adobe Apple Microsoft'.split(" "), 
    City: 'London Paris Berlin'.split(" ") 
    }; 
    $('#'+strFormName).autocomplete(lists[strFormName]); 
} 

這將創建一個對象,在JavaScript中,你可以通過object.propertyobject['property'],你的輸入字符串是非常適合:)

訪問
0

我想我可以看到你的問題。你傳遞給自動完成的參數是一個字符串「City」...而不是你認爲你傳遞的數組。

你可以用eval這個字符串來獲取變量。

$('#'+strFormName).autocomplete(eval(strFormName)) ; 
+1

去T.J. Crowder的解決方案 - 比我的更清潔。 – Jamiec 2010-06-18 10:52:34

0

你肯定.autocomplete()需要在strFormName叫?不應該在strInputName上調用?

$('#idofsometextbox').autocomplete()