2017-04-14 48 views
1

因此,這裏是我的html轉換選擇選項值VAR

<select class="form-control" id="citizenType"> 
    <option value="value1">value1</option> 
    <option value="value2">value2</option> 
</select> 

和我的JS

$(document).ready(function() { 
    var value1 = new Array("1","2","3"); 
    var value2 = new Array("4","5","6"); 
    function grade(arr) { 
    $(arr).each(function(i) { 
     $("#grade").append("<option>" + arr[i].value + "</option>"); 
    }); 
    }; 

    $("#citizenType").change(function() { 
    var select = $("#citizenType option:selected").val(); 
    grade(select); 
    }); 
}); 

爲什麼不arrgrade()視爲一個變量時passesd?

+0

我可能是錯在這裏,但是,這不是」 t「選擇」一個javascript關鍵詞?如果是這樣,你不能用它作爲你的變量名稱編輯:好吧,mb –

回答

2

問題是$("#citizenType option:selected").val()是字面上的"value1""value2"。所以當你將它傳遞給grade()函數時,它會調用$("value1").each(...)這將返回0個元素,因此什麼都不做。這裏是你如何可以改變你的代碼來實現你要找的結果:

$(document).ready(function() { 
 
    var data = { 
 
    value1: new Array("1", "2", "3"), 
 
    value2: new Array("4", "5", "6") 
 
    }; 
 

 
    function grade(arr) { 
 
    $("#grade").empty(); // empty the options list before appending new options 
 
    $.each(arr, function(index, elem) { 
 
     $("#grade").append("<option>" + elem + "</option>"); 
 
    }); 
 
    }; 
 
    $("#citizenType").change(function() { 
 
    var select = $("#citizenType option:selected").val(); 
 
    grade(data[select]); // access data[selectedValue] to grab the correct array 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select class="form-control" id="citizenType"> 
 
    <option value="value1">value1</option> 
 
    <option value="value2">value2</option> 
 
</select> 
 

 
<select id="grade"></select>

+0

感謝您的幫助! :) – katsele

+0

@katsele不客氣!很高興我能幫忙=) – mhodges

2

環繞你瓦爾在一個對象,然後用括號標記這樣的訪問它們:

$(document).ready(function() { 
    var varWrapper = { 
    "value1": new Array("1","2","3"), // accessed using varWrapper["value1"] 
    "value2": new Array("4","5","6") // accessed using varWrapper["value2"] 
    // ... 
    }; 
    function grade(arr) { 
    // you may consider emptying #grade first using $("#grade").empty() 
    // $.each is better for looping arrays and objects 
    $.each(arr, function(i, value) { 
     $("#grade").append("<option>" + value + "</option>"); 
    }); 
    }; 
    $("#citizenType").change(function() { 
    var select = $("#citizenType option:selected").val(); 
     grade(varWrapper[select]); // access the according variable from varWrapper 
    }); 
}); 
+0

感謝您的幫助! :) – katsele

0

在這種情況下,你都可以是passedtwo值的回調函數內。第一個是你正在使用的'i'值(這是數組中對象的索引),第二個是你當前正在處理的項目的值,所以如果你想迭代每個值並且追加與該值的選項,您需要做的是這樣的:

$(arr).each(function(i, value) { 
     $("#grade").append("<option>" + value + "</option>"); 
    }); 

下面是該文檔的一個鏈接,JQuery的API的這一部分:http://api.jquery.com/jquery.each/