2016-12-04 77 views
1

我根據從php腳本中獲得的json數據填充選擇輸入字段的選項。基於值的json對象中的搜索鍵

這工作正常,但我想顯示一些額外的信息,根據選定的選項。 基本上,我正在尋找一種方式來找到與所選擇的選項去按鍵:

$("#code").html(result[whichkey]["uniquecode"]); 

This fiddle希望讓我的問題更多更清晰一點。

任何幫助非常感謝!

回答

2

鑑於使用對象的uniquecode作爲其值創建option元素,爲什麼您甚至需要再次訪問該對象?您可以檢索所選option ...的value屬性...?

假設這只是因爲你過於簡單的例子,在陣列中的對象都持有未在option元素本身持有的其他有用的數據,那麼你可以使用$.grep由對象的濾鏡陣列選擇uniquecode,像這樣:

var json = '[{"uniquecode":"b32dez2","name":"John Doe","foo":"bar"},{"uniquecode":"a2df32","name":"Adam Smith","foo":"buzz"}]'; 
 
var result = JSON.parse(json); 
 
var $sel = $('#names').change(function() { 
 
    var value = this.value; 
 
    var obj = $.grep(result, function(e) { 
 
    return e.uniquecode == value; 
 
    }); 
 
    $("#code").html(obj[0].uniquecode + '/' + obj[0].foo) 
 
});; 
 

 
result.forEach(function(obj) { 
 
    $('<option value="' + obj.uniquecode + '">' + obj.name + '</option>').appendTo($sel) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="names"></select> 
 
<div id="code"></div>

請注意,我說的foo屬性的對象,以顯示你如何訪問THOS以外的對象的屬性e直接放置在option元素上。

另請注意,我簡化了生成option元素的代碼。如果你打算在你的項目中使用jQuery,那麼你可以在任何地方使用它。

+0

我確實過分簡化了我的問題,數組中的對象包含其他有用的數據,這些數據不在選項元素本身中。你的例子完全符合我的要求。不知道'$ .grep'。非常感謝! – binoculars

+0

剛剛偶然發現了一個新問題。我使用jQuery驗證(https://github.com/jzaefferer/jquery-validation)來驗證表單。有了這個插件,我可以定義一些規則:'規則:{'輸入字段名稱':{required:true,range:[60,120]}'。這隻允許60到120之間的數字。如果'range_upperlimit'和'range_lowerlimit'也是json對象的一部分,我怎麼能根據選擇的選項動態地改變這個範圍? – binoculars

+0

我相信驗證者也會尊重你添加到元素中的屬性來設置它的規則。檢查文檔以獲取更多信息,或隨時爲其開始一個新問題。 –