2017-07-19 11 views
0

HTML:関数の引数に基づいて変数を取得しますか?

<button id="s01" onclick="getMusic(this.id)"></button> 
<button id="s02" onclick="getMusic(this.id)"></button> 

JAVASCRIPT:

var s01 = ["file", "song"]; 
var s02 = ["file", "song"]; 

function getMusic(e){ 
    alert() 
} 

申し分なく私は(これは簡易版である)上に、このコードを持っています。この関数は、es01またはs02のいずれかに設定します(getMusic(e))。その名前に対応する変数(alert()内)を呼び出せるようにする必要がありますが、どこから開始するかはわかりません。どんな助けでも感謝しています!


P.S.私は onclick=""をHTMLファイルから削除し、それをjsファイルの addEventListenerに置き換えても同じ効果を達成できますか?私はそのようなスクリプトを混ぜるのは好きではありません。

答えて

3

、あなたのデータを保持するオブジェクトを使用している場合、それはあなたがaddEventListenerを使用している場合は、JavaScriptなども

var data = { 
 
    s01 : ["file1", "song"], 
 
    s02 :["file2", "song"] 
 
} 
 

 
document.querySelectorAll('.btn').forEach(function(el) { 
 
    el.addEventListener('click', function() { 
 
    console.log(data[this.id]); 
 
    }); 
 
});
<button id="s01" class="btn">Test 1</button> 
 
<button id="s02" class="btn">Test 1</button>

+0

OPは、彼のデータ型を変更する必要はありません。組み込みの 'window'オブジェクトは、このデータをまったく同じ方法で表示します。つまり、' window ["s01"] 'です。 – Toastrackenigma

+0

@Toastrackenigma - だから私は、オブジェクトを使用してグローバルを追加することを提案し、変数が実際にグローバルであると仮定すると、悪い習慣です。 – adeneo

1

インラインを削除することができます

var data = { 
    s01 : ["file", "song"], 
    s02 : ["file", "song"] 
}; 

function getMusic(e){ 
    console.log( data[e] ); 
} 

はるかに簡単です最初に、2番目の質問に答えるために、はい、イベントリスナーをJSに登録することができます:

document.querySelectorAll("input[type=button]").forEach(function(el){ 
    el.addEventListener("click", getMusic) 
}) 

あなたのイベントハンドラがそのように登録したら、e.target.idにアクセスすることで、ボタンのidを得ることができます。この時点で

function getMusic(e){ 
    alert(e.target.id) // will alert with button id 
} 

、あなたはidを含む文字列を持っています。今度はidに対応する値を引き出す必要があります。 idに対応するハッシュを持つJSONバッグを定義するのが最も理にかなっています。

+0

あなたの答えには少なくとも2つの問題があります。まず、nodeListで 'addEventListener'を呼び出すことはできません。また、' e.target'は、ハンドラでバインドされている要素ではありません。 – adeneo

+0

これらの問題にも気づいた。ヘッドアップをありがとう。編集されました。 –

-2

JavaScriptでは、すべてのグローバル変数を含むwindowオブジェクトが存在します。

単にあなたの配列の値を取得するためにwindow[e]を使用します。

var s01 = ["file", "song"]; 
 
var s02 = ["file", "song"]; 
 

 
function getMusic(e){ 
 
    alert(window[e]) 
 
}
<button id="s01" onclick="getMusic(this.id)"></button> 
 
<button id="s02" onclick="getMusic(this.id)"></button>

+0

なぜdownvotes? 'window'はJavaScriptでこれを行うためのサポートされた方法です。 – Toastrackenigma

+0

[グローバル変数は悪いニュースです。](http://wiki.c2.com/?GlobalVariablesAreBad)あなたが_can_だからこそ、あなたが_そうだとは限りません。 –