下拉菜单出现“有选项但没有文字内容”的常见原因,是 Ja vaScript 在读取 JSON 数据时使用了错误的字段名:代码访问的是并不存在的 name,而实际返回的字段却是 nom。一旦字段名称不匹配,textContent 获取到的值就会变成 undefined,最终导致下拉选项显示为空白。

下拉选择框出现“有选项但看起来是空白”的问题,根本原因仍然是 Ja vaScript 读取 JSON 字段时取错了键名:代码中使用了不存在的 name,而真实字段实际上是 nom。因此,textContent 最终被赋值为 undefined,浏览器渲染后就表现为下拉选项没有文本内容。
在你提供的代码里,JSON 数据结构如下:
[{"id":"id_App","nom":"name_App"}, {"id":"id_App","nom":"name_App"}]这里的关键在于:表示应用名称的字段是 "nom",并不是 "name"。但在 Ja vaScript 的 populateApp() 函数中,你当前写法是:
option.textContent = app.name; // ❌ 错误:app.name 为 undefined由于 app.name 这个属性并不存在,option.textContent 实际上拿到的是 undefined。而浏览器通常不会因此直接报错,而是将其显示为空字符串,所以才会出现“下拉框有选项但文字不可见”的现象。
✅ 正确写法应改为:
option.textContent = app.nom; // ✅ 使用正确的属性名完整修复后的 Ja vaScript 函数如下:
function populateApp() {
fetch('./json.json')
.then((response) => response.json())
.then((json) => {
const appli = document.getElementById('appli');
json.forEach((app) => {
const option = document.createElement('option');
option.value = app.id;
option.textContent = app.nom; // ← 已修正:使用 nom 而不是 name
appli.appendChild(option);
});
})
.catch((error) => {
console.error('Error fetching JSON:', error);
});
}⚠️ 额外建议:
- 建议在插入选项前先做字段校验,避免因 JSON 字段缺失导致下拉框文本空白却不报错:
option.textContent = app.nom || 'N/A'; - 如果后续需要支持多语言,或者担心接口字段调整,建议统一 JSON Schema,例如固定使用
name作为名称字段,并在后端或配置层完成标准化处理。 - 同时要确保
populateApp()在 DOM 完成加载后再执行,例如放到DOMContentLoaded事件中,否则document.getElementById('appli')可能返回null,从而影响下拉菜单正常渲染。
完成上述修改后,下拉框选项将能够正确显示 "name_App" 等文本内容,从而解决下拉选择框文字不显示、选项内容不可见的问题,用户也能更清晰地识别和选择对应项目。
