我正在尝试检索键是变量的数组值。 JSFiddle here - 在行业输入中键入“服装”或“书籍”。 JSFiddle的输出声明返回的值是未定义的。
问题在于var filename = constants.factsheet
- 如何正确传递资料单的值以检索相关的文件名?
JS:
$(function () {
var availableIndustries = ["apparel", "books"];
$("#industry").autocomplete({
source: availableIndustries
});
$("input[type=image]")
.button()
.click(function (event) {
var constants = {
'apparel': 'apparel.pdf',
'books': 'publishing.pdf',
};
var factsheet = document.getElementById('industry').value;
var filename = constants.factsheet;
$('#factsheet').text('Your factsheet is ' + factsheet);
$('#file').text('Your filename is ' + filename);
});
});
答案 0 :(得分:1)
变化:
var filename = constants.factsheet;
为:
var filename = constants[factsheet];
(请注意,您的constants
不是数组。它是一个对象。)
在JavaScript中,您可以通过两种方式访问对象属性:使用点表示法和文字属性名称(constants.apparel
),或使用括号表示法和字符串属性名称(constants["apparel"]
)。在第二种情况下,字符串可以是任何表达式的结果,包括变量查找。所以这些都表明了同样的事情:
// Dot notation
console.log(constants.apparel);
// Brackets with string literal
console.log(constants["apparel"]);
// Brackets with concatentation expression
console.log(constants["app" + "arel"]);
// Brackets using a variable
var name = "apparel";
console.log(constants[name]);
// Brackets using the return value of a function
function foo() { return "apparel"; }
console.log(constants[foo()]);
你明白了。
答案 1 :(得分:1)
T.J。 Crowder使用括号语法通过变量键名来查找对象是正确的,我只是通过将静态文件对象常量移出事件函数(不需要每次都生成)来优化一些事情,并缓存{ {1}}元素引用。
#industry
答案 2 :(得分:0)
我在您的代码中以适用于您的方式发布上述答案。
$(function () {
var availableIndustries = ["apparel", "books"];
$("#industry").autocomplete({
source: availableIndustries
});
$("input[type=image]")
.button()
.click(function (event) {
var constants = {
'apparel': 'apparel.pdf',
'books': 'publishing.pdf',
};
var factsheet = document.getElementById('industry').value;
var filename = constants[factsheet];
$('#factsheet').text('Your factsheet is ' + factsheet);
$('#file').text('Your filename is ' + filename);
});
});