2017-05-25 11 views
-4

私は単純なアプリを作ろうとしています。私は以下の考え方を持っています。私はユーザーが都市を選ぶことができる2つの入力フィールドを持っており、私は結果を得たいJSONも持っています。今私が望むのは、ユーザーがどの都市を選ぶかによって異なる結果になるということです。これは私のオブジェクト(JSON)です:JSONを入力で使用するJavaScript

var cities = { 
    "newyork": { 
     "newyork": 0, 
     "washington": 50, 
     "sacramento": 100, 
     "miami": 150   
    }, 
    "washington": { 
     "washington": 0, 
     "newyork": 50, 
     "sacramento": 100, 
     "miami": 150 
    } 
}; 

これは私のHTMLです:ユーザーが第二の最初の入力で、ニューヨークを選択し、サクラメント:私が達成したいものの

<form> 
    <select id="firstInput" onchange="calculatePrice()"> 
     <option value="newyork">newyork</option> 
     <option value="washington">washington</option> 
     <option value="sacramento">sacramento</option> 
     <option value="miami">miami</option> 
    </select> 
    <select id="secondInput" onchange="calculatePrice()"> 
     <option value="newyork">newyork</option> 
     <option value="washington">washington</option> 
     <option value="sacramento">sacramento</option> 
     <option value="miami">miami</option> 
    </select> 
</form> 
<div id="output">Output: 500</div> 

例。出力は50に変更されます。ご覧のとおり、JSONまたはJSのオブジェクトからデータをロードします。

は、これが私のJSです:

function calculatePrice() { 

    var x = document.getElementById("firstInput").value; 
    console.log(x); 
    var y = document.getElementById("secondInput").value; 
    console.log(y); 
    console.log(cities.x.y); 
    document.getElementById("output").innerHTML = "Output: " + cities.x.y; 

} 

しかし、このコードを使用して、私は次のエラーを取得する:私は(y)をCONSOLE.LOGとき、それは正常に動作しているように見えるので、
Uncaught TypeError: Cannot read property 'y' of undefined
は、これが混乱して。
誰もがこれを手伝ってくれますか? https://jsbin.com/laluzawuda/edit?html,js,console,output

+1

これは '' variable'オブジェクトを含む変数である[firstcity] [secondcity] '' firstcity'は、最初のメニューからの値であるvariable.citiesなければなりません'secondcity'は2番目のメニューからの値です。 – Barmar

+3

SOは無料のコーディングサービスではありません。自分で問題を解決しようとする試みが必要です。あなたがそれを働かせることができない場合は、あなたが試したものを投稿してください。 – Barmar

+0

@Barmar私は解決策を求めていません。私はこれを私がイメージした方法で達成できるのかと尋ねていますか?また、同様の問題の例は参考になります。とにかく私はすでにいくつかの試みをしてきましたが、できるだけ早く質問を更新します。 – Zvezdas1989

答えて

2

cities.x.ycities[x][y]する必要があります:あなたはより良い外観を持つことができるので、ここで はJSBinです。 cities.x.yは、citiesxという名前のプロパティーを検索しますが、そのプロパティーの値をプロパティー名として使用しません。 http://stackoverflow.com/questions/4244896/dynamically-access-object-propertyを参照してください。

function calculatePrice() { 
 

 
    var x = document.getElementById("firstInput").value; 
 
    console.log(x); 
 
    var y = document.getElementById("secondInput").value; 
 
    console.log(y); 
 
    if (cities[x] && cities[x][y]) { 
 
    console.log(cities[x][y]); 
 
    document.getElementById("output").innerHTML = "Output: " + cities[x][y]; 
 
    } else { 
 
    console.log("No flights from " + x + " to " + y); 
 
    } 
 
} 
 

 
var cities = { 
 
    "newyork": { 
 
    "newyork": 0, 
 
    "washington": 50, 
 
    "sacramento": 100, 
 
    "miami": 150 
 
    }, 
 
    "washington": { 
 
    "washington": 0, 
 
    "newyork": 50, 
 
    "sacramento": 100, 
 
    "miami": 150 
 
    } 
 
};
<form> 
 
    <select id="firstInput" onchange="calculatePrice()"> 
 
     <option value="newyork">newyork</option> 
 
     <option value="washington">washington</option> 
 
     <option value="sacramento">sacramento</option> 
 
     <option value="miami">miami</option> 
 
    </select> 
 
    <select id="secondInput" onchange="calculatePrice()"> 
 
     <option value="newyork">newyork</option> 
 
     <option value="washington">washington</option> 
 
     <option value="sacramento">sacramento</option> 
 
     <option value="miami">miami</option> 
 
    </select> 
 
</form> 
 
<div id="output">Output: 500</div>

+0

ありがとうございます。私はある時点で私は都市[x] [y]を使って試しましたが、私はまだ未定義のエラーを得ていたと思います。 – Zvezdas1989

関連する問題