我正在尝试从我选择的选项列表中获取值,我也通过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
答案 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语句中。
这应该有效。