从对象文字获取链接值,onchange - Javascript/HTML select

问题描述:

我知道如何使用开关盒例程来操作此菜单,但我想将开关盒更改为对象文字。部分A知道如何获取onchange值并打开一个窗口。 B部分知道如何在一个对象中的名称:值对中查找值,但只有在给定一个硬编码的名称以匹配值时才适用。我必须结合A部分和B部分的能力。由于A部分和B部分都是相互独立工作的,所以将它们结合起来应该是一件简单的事情,但我已经过了四天,而且我不知道如何。部分A:这个选择菜单的值属性中的硬编码链接被用作对象中名称的值替换。由于是,这打开的标签,因为它应该,但我想在B部分“林克”,从相应的对象称为链路的权值从对象文字获取链接值,onchange - Javascript/HTML select

<select id="sed"> 
    <option value="" selected>Select:</option> 
    <option value="prev" >PREV</option> 
    <option value="next">NEXT</option> 
    <option value="home">home</option> 
    <option value="gimme">contribute</option> 
</select> 

<script> 
document.getElementById('sed').addEventListener ('change', valuu); 

function valuu() { 
ddd = document.getElementById("sed").value; 
window.open(ddd, '_self'); 
} 
</script> 

PART B:这个脚本是从网上例子从对象中获取相应值的方法。它将正确的链接作为字符串粘贴到控制台中。正确答案在脚本的最后一行被硬编码为'gimme'。我必须用代码取代'gimme',代码从select选项值中获取onchange值,并查找对象中的相应链接。

<script> 
/*Works when pasted into console*/ 
function foo(bar) { 
    var lynk = { 
    'default': (''), 
    'next': ('nextly.html'), 
    'prev': ('previous.html'), 
    'gimme': ('http://patreonx.com/bxaxly'), 
    'home': ('index.html') 
    }; 
    return lynk[bar]; 
} 
foo('gimme'); 
</script> 

这应该是动态的。

function valuu() { 
    ddd = document.getElementById("sed").value; 
    window.open(foo(ddd), '_self'); 
} 

你可以做到这一切在一个函数一样,

document.getElementById('sed').addEventListener ('change', function(e){ 
    var lynk = { 
    'default': (''), 
    'next': ('nextly.html'), 
    'prev': ('previous.html'), 
    'gimme': ('http://patreon.com/bearly'), 
    'home': ('index.html') 
    }; 
    window.open(lynk[e.target.value]); 
}); 
+0

A部分的作品,B部分工作。我需要让他们一起工作。 – Lutherman

+0

请参阅更新的答案,第二个代码片段。 –

+0

如果工作,请接受它作为答案。 thx –