0

我正在尝试检索键是变量的数组值。JSFiddle这里——在行业输入中输入“服装”或“书籍”。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);

      });
  });
4

3 回答 3

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()]);

你明白了。

于 2013-11-05T16:41:32.363 回答
1

TJ Crowder 使用括号语法通过变量键名查找对象是正确的,我只是通过将静态文件对象常量移出事件函数(无需每次都生成)来优化一些东西,并缓存#industry元素参考。

$(function () {

  var industryInput = $('#industry'),
      availableIndustries = ['apparel', 'books'],
      files = {
          'apparel': 'apparel.pdf',
          'books': 'publishing.pdf'
      };

  industryInput.autocomplete({
      source: availableIndustries
  });

  $('input[type=image]').button().click(function (event) {
      var factsheet = industryInput.value;
      $('#factsheet').text('Your factsheet is ' + factsheet);
      $('#file').text('Your filename is ' + files[factsheet]);
  });
});
于 2013-11-05T16:59:25.990 回答
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);

      });
  });
于 2013-11-05T16:45:04.907 回答