JS从select选项应用于object获取值 - undefined

时间:2018-04-15 07:11:56

标签: javascript jquery json object selected

我有HTML:

<select id="select">
        <option selected="selected" value="amon_amarth">Amon Amarth</option>
        <option value="arch_enemy">Arch Enemy</option>
        <option value="children_bodom">Children of_bodom</option>
        <option value="dark_tranquillity">Dark tranquillity</option>
        <option value="death">Death</option>
        <option value="ensiferum">Ensiferium</option>
        <option value="korpiklaani">Korpiklaani</option>
        <option value="norther">Norther</option>
        <option value="white_skull">White skull</option>
    </select>
    <button id="play">play</button>

然后我从选择选项中获得价值:

$(document).ready(function() {
  $("select").on('change', function () {
    let value = $(this).val().toString();
    let clicksound  = ss_soundbits('sound/' + music.value);
    $('#play').click(function () {
      // ss_soundbits('sound/' + music.value).playclip();
      clicksound.playclip();
      console.log(music);
      console.log(value);
      console.log(music.value);
    });
  })
});

console.log(音乐) - 是我的对象,没关系:

Object { amon_amarth: "amon_amarth_the_pursuit_of_vikings_(NaitiMP3.ru).mp3", arch_enemy: "Arch_Enemy-09_Ravenous_(muzroom.online).mp3", children_bodom: "children_of_bodom_are_you_dead_yet_(NaitiMP3.ru).mp3", dark_tranquillity: "dark_tranquillity_-_haven_2000_-_dark_tranquillity_-_rundown_(zf.fm).mp3", death: "death_-_painkiller_gon_nad_dzhudas_prist_(zf.fm).mp3", ensiferum: "ensiferum-ahti_(mp3CC.com).mp3", korpiklaani: "korpiklaani-midsummer-night_(mp3CC.com).mp3", norther: "Norther - Last Breath (ouronlyhope.org).mp3", white_skull: "white-skull-high-treason_(mp3CC.com).mp3", siplyi: "white-skull-high-treason_(mp3CC.com).mp3", … }

console.log(音乐) - 是我的价值,也可以:北方

但是当我试图将我的值应用于Object(music.value)时,它会说:undefined

然而,如果我把

,它就有效
<button onclick="clicksound.play()">

在我的js文件中有以下代码:

let clicksound = ss_soundbits('sound/' + music.amon_amarth);

我做错了什么?我花了一整天时间来解决这个问题。我可以使用不同的按钮/ div修复它,但我仍然想了解如何解决当前问题。 谢谢!

2 个答案:

答案 0 :(得分:0)

如果这是您尝试实现的结果,请告知我们:

Btw,令人惊叹的音乐品味:))

&#13;
&#13;
let music = {}

$(document).ready(function() {
  $("select").on('change', function() {
    let value = $(this).val();
    music.value = value;
    // let clicksound  = ss_soundbits('sound/' + music.value);
    $('#play').click(function() {
      // ss_soundbits('sound/' + music.value).playclip();
      // clicksound.playclip();
      console.log(music);
      console.log(value);
      console.log(music.value);
    });
  })
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="select">
    <option selected="selected" value="amon_amarth">Amon Amarth</option>
    <option value="arch_enemy">Arch Enemy</option>
    <option value="children_bodom">Children of_bodom</option>
    <option value="dark_tranquillity">Dark tranquillity</option>
    <option value="death">Death</option>
    <option value="ensiferum">Ensiferium</option>
    <option value="korpiklaani">Korpiklaani</option>
    <option value="norther">Norther</option>
    <option value="white_skull">White skull</option>
</select>
<button id="play">play</button>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

只有当您引用实际密钥本身时,才能访问对象中的值。 music.value表示您想要检索其键实际上称为“值”的键值对,该值不存在。

根据我的评论,你想要的是使用music[value],而value是一个存储你想要的引用的变量。

在旁注中,您不应该在事件处理程序中绑定事件处理程序:这会导致click事件绑定到#play元素每个change事件被解雇的时间,这是非常不合理的。请参阅下面的重构代码:

let clicksound;

$("select").on('change', function () {
    let value = $(this).val();
    clicksound  = ss_soundbits('sound/' + music[value]);
  });

$('#play').click(function () {
  clicksound.playclip();
});