2015-09-18 43 views
0

我試圖從選擇選項列表中獲取值,我也是通過javascript生成的,但由於某些原因我無法檢索它。未能從select中獲取值(值未定義)

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

您已經在document.ready回調中聲明瞭「audioValue」和「videoValue」,然後您試圖將它們分配給一個完全不同範圍內的對象字面值。 –

回答

3

因爲您要定義匿名函數內部的變量。因此它們對外部示波器代碼不可見。

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

爲了解決這個問題,因爲你的publisherOptions變量是全球性的,只是將就緒回調裏面你publisherOptions變量爲好。

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

如何建議他修復流氓「返回」關鍵字以及.. –

+0

問題是如果我把函數中的publisherOptions,我有東西是依賴於。邪惡的圈子。當我試圖刪除文檔準備好了我無法讀取未定義的屬性'值' –

+0

@SebastianJenningsAlmnes,您的publisherOptions是全局範圍,無論依賴它還是可以訪問它。只要不將'var publisherOptions'行放在就緒回調中就可以保留原來的位置。 –

0

您的jQuery ready函數在您的vanilla JavaScript之前先觸發。因此,在設置audioValue時,它會變得不確定。您可以將JavaScript封裝在閉包中,或將其放入jQuery就緒語句中。

這應該工作。