初学者提问:Javascript中的变量

时间:2010-06-18 10:46:18

标签: javascript jquery

我是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”

感谢我能得到的所有帮助。

4 个答案:

答案 0 :(得分:4)

您将strFormName的实际值传递给自动完成器。您可能想要这样做:

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

这样做会创建一个包含两个属性dataCity的对象(Company)。然后,在将数组传递给自动完成器时,它会通过使用[]语法按名称查找属性来选择适当的数组。

JavaScript对于如何访问属性非常灵活。例如,所有这些都检索City的{​​{1}}属性:

data

您明白了,您可以通过在代码中使用其名称来访问属性,或者通过使用var x = data.City; var x = data['City']; var y = "City"; var x = data[y]; var x = data["C" + 'i' + "t" + 'y']; 索引到对象并将属性作为字符串(可以是字符串文字,或来自变量,表达式或函数结果的字符串,或......)。

我可能会将[]内容移出data,因为您不需要每次都重新创建它。

答案 1 :(得分: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']访问它,您的输入字符串非常适合:)

答案 2 :(得分:0)

我想我能看出你的问题。您传递给自动填充的参数是一个字符串“City”...而不是您认为正在传递的数组。

您可以eval字符串来获取变量。

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

答案 3 :(得分:0)

您确定.autocomplete()需要调用strFormName吗?是不是应该在strInputName上调用?

$('#idofsometextbox').autocomplete()