2010-06-18 65 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()