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

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 に答える
1

変化する:

var filename = constants.factsheet;

に:

var filename = constants[factsheet];

( your は配列ではないことに注意してくださいconstants。オブジェクトです。)

constants.apparelJavaScript では、ドット表記とリテラル プロパティ名を使用する方法 ( )、または括弧付き表記と文字列プロパティ名を使用する方法 ( )の 2 つの方法でオブジェクト プロパティにアクセスできますconstants["apparel"]。2 番目のケースでは、文字列は、変数ルックアップを含む任意の式の結果である可能性があります。したがって、これらはすべて同じことを示しています。

// 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 に答える
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 に答える