根据函数参数获取变量?

时间:2017-07-19 21:59:30

标签: javascript

HTML:

def addToTail(myList, value):
    ptr = myList
    prev = ptr
    while ptr != None:
         prev = ptr
         ptr = ptr['next']
    node = {}
    node['data'] = value
    node['next'] = None
    prev['next'] = node 
    return myList

JAVASCRIPT:

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

好吧所以我上面有这个代码(这是一个简化版本)。此功能会将var s01 = ["file", "song"]; var s02 = ["file", "song"]; function getMusic(e){ alert() } 中的e设置为getMusic(e)s01。我需要能够调用与该名称相对应的变量(在s02内),但我甚至不确定从哪里开始。任何帮助表示赞赏,谢谢!

<小时/> 附:我有机会从HTML文件中删除alert()并将其替换为js文件中的onclick=""并仍然达到相同的效果吗?我不喜欢像这样混合我的脚本。

3 个答案:

答案 0 :(得分:3)

如果你使用一个对象来保存你的数据,那就容易多了

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

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

如果你使用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>

答案 1 :(得分:1)

首先,回答你的第二个问题,是的,你可以在JS中注册事件监听器:

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

一旦您以这种方式注册了事件处理程序,您就可以通过访问id获取该按钮的e.target.id

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

此时,您有一个包含id的字符串;现在您需要能够提取与id对应的值。定义一个带有与id对应的哈希的JSON包是最有意义的。

var data = {
  s01: ["your", "data"],
  s02: ["your", "other", "data"]
}
function getMusic(e){
  myData = data[e.target.id]
  alert(myData)
}

答案 2 :(得分:-2)

在JavaScript中,window对象存在,其中包含所有全局变量。

只需使用window[e]即可获得数组的值:

&#13;
&#13;
var s01 = ["file", "song"];
var s02 = ["file", "song"];

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