无法从select中获取值(未定义值)

时间:2015-09-18 22:04:28

标签: javascript opentok

我正在尝试从我选择的选项列表中获取值,我也通过javascript生成但是由于某种原因我无法检索它。

var a, i, v;

v = document.querySelector('#video-setting');
a = document.querySelector('#audio-setting');

i = 0;

while (i < audioInputDevices.length) {
  a.innerHTML += '<option value=' + audioInputDevices[i].deviceId + '>' + audioInputDevices[i].label + '</option>';
  i++;
}

i = 0;

while (i < videoInputDevices.length) {
  v.innerHTML += '<option value=' + videoInputDevices[i].deviceId + '>' + videoInputDevices[i].label + '</option>';
  i++;
}

return;
var publisherOptions;

$(document).ready(function() {
  var au, audioValue, vi, videoValue;
  au = document.getElementById("audio-setting");
  audioValue = au.options[au.selectedIndex].value;
  vi = document.getElementById("video-setting");
  videoValue = vi.options[vi.selectedIndex].value;
});

publisherOptions = {
  audioSource: audioValue,
  videoSource: videoValue
};

和我的HTML:

<select id="video-setting"></select>
<select id="audio-setting"></select>

现在我得到的错误是:

Uncaught ReferenceError: audioValue is not defined

2 个答案:

答案 0 :(得分:3)

因为您在匿名函数中定义了变量。因此,外部范围代码不可见它们。

$(document).ready(function() {
  var au, audioValue, vi, videoValue; //this defines local scope variables
                                      //won't be visible outside this function
  ...
});

要解决此问题,由于您的publisherOptions变量是全局变量,因此您也可以在ready回调中设置publisherOptions变量。

$(document).ready(function() {
    ...
    publisherOptions = {
        audioSource: audioValue,
        videoSource: videoValue
    };
});

答案 1 :(得分:0)

你的jQuery ready函数首先在你的vanilla JavaScript之前触发。因此,当设置audioValue很累时,它将是未定义的。您可以将JavaScript包装在闭包内或将其放在jQuery ready语句中。

这应该有效。