2013-08-19 74 views
0

什麼,我在此代碼做錯了:負載選擇選項

<form action=""> 
    <select class="input-xlarge required" id="inputGender" name="inputGender"> 
     <option value="">select</option> 
     <option value="m">male</option> 
     <option value="w">female</option> 
    </select> 

    <select class="input-xlarge" id="inputWeight" name="inputWeight"> 
     <option value="">select</option> 
    </select> 

    <input type="submit" name="action" value="Book" /> 
</form> 


var data = [ 
    [ 
     {"ID":"1", "desc":"(12)"}, 
     {"ID":"2", "desc":"(5)"}, 
     {"ID":"6", "desc":"(15)"} 
    ] 
    [ 
     {"ID":"0", "desc":"(49)"}, 
     {"ID":"7", "desc":"(5)"} 
    ] 
]; 


$("#inputGender").change((function() { 
    var $persons = $("#inputWeight").empty(); 
    $.each(data[$(this).val() - 1], function() { 
     $persons.append("<option value=" + this.ID + ">" + this.desc + "</option>"); 
    }); 
}); 

); 

當值m選擇我要填充這個數據:

[ 
    {"ID":"1", "desc":"(12)"}, 
    {"ID":"2", "desc":"(5)"}, 
    {"ID":"6", "desc":"(15)"} 
] 

在選擇ID #inputWeight。或者如果w被選中然後顯示:

[ 
    {"ID":"0", "desc":"(49)"}, 
    {"ID":"7", "desc":"(5)"} 
] 

...但它不工作。

有些想法嗎?

回答

2

這條線是什麼錯在你的JS:

$.each(data[$(this).val() - 1], function() { 

$this.val(),在此背景下,意味着inputGender的價值,它可以是 「M」 或 「W」。你必須從別的地方粘貼這些代碼,因爲它假定了整數值。試試你的數據變爲這樣:

var data = { 
    m: [{"ID":"1","desc":"(12)"},{"ID":"2","desc":"(5)"},{"ID":"6","desc":"(15)"}], 
    w: [{"ID":"0","desc":"(49)"},{"ID":"7","desc":"(5)"}] 
}; 

,然後你可以使用$(this).val()得到你想要的數組:

$("#inputGender").change(function() { 
    var $persons = $("#inputWeight").empty(); 
    $.each(data[$(this).val()], function() { 
     $persons.append("<option value=" + this.ID + ">" + this.desc + "</option>"); 
    }); 
}); 

看到它在this fiddle帶電作業。

+0

絕對完美的老闆?但如果我需要從data.php等其他文件訪問數據...我怎麼能訪問? –

+0

data.php與var Data中的內容相同...我們在這裏有。不同的是我們只是從不同的文件訪問它。 –

+0

嗯,這取決於,你的意思是你有'data.php'文件吐出一些JSON?那麼我想你可以加載它'var data = $ .getJSON('data.php');'?你可能想發佈一個新的問題(或者尋找類似的問題和他們的答案,我相信你的問題已經被回答了)。如果您的原始問題已解決,請將我的答案標記爲已接受並將其關閉。 –