首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:未能对“HTMLSelectElement”执行“”add“”:提供的值不是类型“”(HTMLOptionElement或HTMLOptGroupElement)“”

TypeError:未能对“HTMLSelectElement”执行“”add“”:提供的值不是类型“”(HTMLOptionElement或HTMLOptGroupElement)“”
EN

Stack Overflow用户
提问于 2021-03-03 19:39:11
回答 1查看 382关注 0票数 0

使用以下代码获取所有可用的麦克风,并使用该列表更新选择器。

代码语言:javascript
复制
const audioInputSelect = document.querySelector('select#audioSource');

// Updates the select element with the provided set of cameras
function updateMicrophoneList(microphones) {
    audioInputSelect.innerHTML = '';
    microphones.map(microphone => {
        const microphoneOption = document.createElement('option');
        microphoneOption.label = microphone.label;
        microphoneOption.value = microphone.deviceId;
    }).forEach(microphoneOption => audioInputSelect.add(microphoneOption));
}


// Fetch an array of devices of a certain type
async function getConnectedDevices(type) {
    const devices = await navigator.mediaDevices.enumerateDevices();
    return devices.filter(device => device.kind === type)
}

getConnectedDevices('audioinput').then(microphonesList => updateMicrophoneList(microphonesList));

获取错误:

代码语言:javascript
复制
audio_devices.js:11 Uncaught (in promise) TypeError: Failed to execute 'add' on 'HTMLSelectElement': The provided value is not of type '(HTMLOptionElement or HTMLOptGroupElement)'
    at audio_devices.js:11
    at Array.forEach (<anonymous>)
    at updateMicrophoneList (audio_devices.js:11)
    at audio_devices.js:21

如何强制document.createElement('option')创建所需类型的元素?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 19:49:13

选项上没有"label“,您需要对选项进行return

代码语言:javascript
复制
audioInputSelect.innerHTML = '';
microphones.map(microphone => {
    const microphoneOption = document.createElement('option');
    microphoneOption.textContent  = microphone.label;
    microphoneOption.value = microphone.deviceId;
    return microphoneOption;
}).forEach(microphoneOption => audioInputSelect.add(microphoneOption));

代码语言:javascript
复制
audioInputSelect.innerHTML = '';
microphones.map(microphone => {
    const microphoneOption = document.createElement('option');
    microphoneOption.textContent  = microphone.label;
    microphoneOption.value = microphone.deviceId;
    audioInputSelect.add(microphoneOption);
})

但这更短更快

代码语言:javascript
复制
audioInputSelect.innerHTML =  microphones
  .map(({deviceId, label }) => `<option value="${deviceId}">${label}</options>`)
  .join("");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66456320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档