![](/img/trans.png)
[英]Change items in a drop-down list depending on the selected option in another drop-down list
[英]Change options in a drop-down list depending on another selected drop-down list
我正在嘗試執行此操作 ,您有一個下拉列表,然后根據您選擇的內容,下一個下拉列表將具有不同的選項。
我在jsfiddle中有我的代碼
<!DOCTYPE html>
<html>
<body>
<select id="diffList" onchange="changeList()">
<option value="">-- Difficulty --</option>
<option value="1">Easy</option>
<option value="2">Medium</option>
<option value="3">Difficult</option>
</select>
<select id="numbList"></select>
<script>
var difficulty = {};
difficulty['1'] = [1,2,3];
difficulty['2'] = [4,5,6];
difficulty['3'] = [7,8,9];
function changeList() {
var diffList = document.getElementById("diffList");
var numbRange = document.getElementById("numbList");
var selectDiff = diffList.options[diffList.selectIndex].value;
while(numbRange.options.length)
{
numbRange.remove(0);
}
var diff = difficulty[selectDiff];
if(diff)
{
var i;
for(i = 0; i < diff.length; i++)
{
var difficulty = new Option(diff[i], i);
numbRange.options.add(difficulty);
}
}
}
</script>
</body>
</html>
我遇到的問題是下一個下拉列表未顯示任何選項。 我已經瀏覽了很多遍代碼,但似乎仍然無法找出問題所在。 有人介意查看一下並讓我知道嗎?
非常感謝。
好的,讓我們一起做:
onchange="changeList()"
在jsfiddle上使用onchange="changeList()"
,因為它會將您的代碼包裝到onclick
處理程序中,並且changeList
函數在外部作用域中不可見。 diffList.value
來檢測第一個選擇diffList.value
的當前選定值: var selectDiff = diffList.value;
difficulty
-它會覆蓋外部作用域的difficulty
變量。 將其命名為option
,例如: var option = new Option(diff[i], i);
diffList
的事件偵聽器: diffList.addEventListener('change', changeList)
這是工作代碼 (僅在chrome瀏覽器上測試過)。
有一個問題在這里- for循環不創建JS嵌套的范圍,所以陰影全局變量困難
for(i = 0; i < diff.length; i++) {
var difficulty = new Option(diff[i], i);
...
我認為這里的主要問題是函數內的javascript作用域。 如果difficulty
是在函數的上下文之外定義的,則需要通過將其附加到window
來將其定義為全局
<!DOCTYPE html>
<html>
<body>
<select id="diffList" onchange="changeList()">
<option value="">-- Difficulty --</option>
<option value="1">Easy</option>
<option value="2">Medium</option>
<option value="3">Difficult</option>
</select>
<select id="numbList"></select>
<script>
window.difficulty = {};
window.difficulty['1'] = [1,2,3];
window.difficulty['2'] = [4,5,6];
window.difficulty['3'] = [7,8,9];
function changeList() {
var diffList = document.getElementById("diffList");
var numbRange = document.getElementById("numbList");
var selectDiff = diffList.options[diffList.selectedIndex].value;
while(numbRange.options.length)
{
numbRange.remove(0);
}
var diff = window.difficulty[selectDiff];
if(diff)
{
var i;
for(i = 0; i < diff.length; i++)
{
var difficulty = new Option(diff[i], i);
numbRange.options.add(difficulty);
}
}
}
</script>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.