将 onchange 监听器添加到您的标记中:
<select name="searchType" onchange="showFields(this)">
<option value="all">All</option>
<option value="music">Music</option>
<option value="movie">Movies</option>
<option value="tvShow">Tv Shows</option>
<option value="musicVideo">Music Videos</option>
<option value="audiobook">Audio Books</option>
<option value="shortFilm">Short Films</option>
<option value="podcast">Podcasts</option>
</select>
试试
function showFields(select) {
var field = select.options[select.selectedIndex].value;
switch (field) {
case "all":
// show all fields
break;
case "music":
// show music field
break;
// ... more cases
default:
// default handler
}
}
在这个 switch 语句中你真正想要做的是调用另一个函数来显示或隐藏另一个下拉列表中的选项。您知道如何设置选择元素和/或显示/隐藏页面元素的选项,对吧?
编辑以显示设置选项:
好的,假设你有这种形式的数据:
var data = [
{type:"music",link:"http://www.domain.com/music/",file:"music1.mp3"}
, {type:"music",link:"http://www.domain.com/music/",file:"music2.mp3"}
, {type:"music",link:"http://www.domain.com/music/",file:"music3.mp3"}
, {type:"music",link:"http://www.domain.com/music/",file:"music4.mp3"}
, {type:"music",link:"http://www.domain.com/music/",file:"music5.mp3"}
, {type:"music",link:"http://www.domain.com/music/",file:"music6.mp3"}
, {type:"movie",link:"http://www.domain.com/movie/",file:"movie1.mp3"}
, {type:"movie",link:"http://www.domain.com/movie/",file:"movie2.mp3"}
, {type:"movie",link:"http://www.domain.com/movie/",file:"movie3.mp3"}
, {type:"movie",link:"http://www.domain.com/movie/",file:"movie4.mp3"}
, {type:"movie",link:"http://www.domain.com/movie/",file:"movie5.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv1.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv2.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv3.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv4.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv5.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv1.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv2.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv3.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv4.mp3"}
, {type:"tv",link:"http://www.domain.com/tv/",file:"tv5.mp3"}
];
可能还不止这些,但这对于我们的目的来说已经足够了。现在,当您的 onchange 处理程序 showFields() 运行时,字段变量的计算结果为“音乐”,其中的代码可能类似于:
// ...
case "music":
var targetSelect = document.getElementById('otherSelect');
targetSelect.options.length = 0; // clear it if it already has values
for (var i=0,imax=data.length; i<imax; i++) {
if (data[i].type == "music") {
var opt = document.createElement('option');
// construct link to run when this option is selected
opt.value = data[i].link + data[i].file;
// using the file name w/o extension for simplicity
opt.label = data[i].file.split('.')[0];
// bad line of code! not enough coffee!
// targetSelect.options[i] = opt;
// Ahh, that's better.
targetSelect.options.push(opt);
}
}
break;
// ...
这是简化的,当然不是所有文件都是 mp3 等,但应该足以让您入门。
进一步编辑:
其实上面有一个错误。您不应该在最后一行使用i 的值。如果你这样做,它将创建一个与数据数组长度相同的稀疏数组,只有大部分值是空的。您可以使用targetSelect.options.push(opt) 或创建一个单独的计数器并独立于i 递增它。抱歉,正着急做这件事,脑抽筋了。