मैं वास्तव में @Marko Dunic द्वारा समाधान पसंद है, लेकिन यह विकल्प को आईडी संलग्न के लिए मेरी जरूरतों को पूरा नहीं किया। एक बार जब मैंने आईडी संलग्न की, तो मुझे एहसास हुआ कि मैं जेएस कोड को भी छोटा और सरल बना सकता हूं। मेरा समाधान तब डिज़ाइन किया गया है जब डेटा एक संबंधपरक डेटाबेस से आता है, और JSON इनपुट डेटा प्राथमिक/विदेशी कुंजी के साथ संबंधपरक संरचना को बरकरार रखता है।
<html lang="en">
<head>
<title>Populate a select dropdown list with jQuery - WebDev Ingredients</title>
<script type="text/javascript" src="js/jquery-1.4.2.js"></script>
<script type="text/javascript">
var types = [
{ typeID: 1, name: 'Domestic'},
{ typeID: 2, name: 'Import'},
{ typeID: 3, name: 'Boat'}
]
var makes = [
{ typeID: 1, makeID: 1, name: 'Chevy'},
{ typeID: 1, makeID: 2, name: 'Ford'},
{ typeID: 1, makeID: 3, name: 'Delorean'},
{ typeID: 2, makeID: 4, name: 'Honda'},
{ typeID: 2, makeID: 5, name: 'Toyota'},
{ typeID: 2, makeID: 6, name: 'Saab'}
]
var model = [
{ makeID: 1, modelID: 1, name: 'Camaro'},
{ makeID: 1, modelID: 2, name: 'Chevelle'},
{ makeID: 1, modelID: 3, name: 'Nova'},
{ makeID: 2, modelID: 4, name: 'Focus'},
{ makeID: 2, modelID: 5, name: 'Galaxie'},
{ makeID: 2, modelID: 6, name: 'Mustang'},
{ makeID: 4, modelID: 7, name: 'Accord'},
{ makeID: 4, modelID: 8, name: 'Civic'},
{ makeID: 4, modelID: 9, name: 'Odyssey'},
{ makeID: 5, modelID: 10, name: 'Camry'},
{ makeID: 5, modelID: 11, name: 'Corolla'}
]
//
// Put this in a stand alone .js file
//
// returns array of elements whose 'prop' property is 'value'
function filterByProperty(arr, prop, value) {
return $.grep(arr, function (item) { return item[prop] == value });
}
// populates select list from array of items given as objects: { name: 'text', value: 'value' }
function populateSelect(el, items) {
el.options.length = 0;
if (items.length > 0)
el.options[0] = new Option('please select', '');
$.each(items, function() {
el.options[el.options.length] = new Option(this.name, this.value);
});
}
// initialization
$(document).ready(function() {
// populating 1st select list
populateSelect($('#sType').get(0), $.map(types, function(type) { return { name: type.name, value: type.typeID} }));
// populating 2nd select list
$('#sType').bind('change', function() {
var theModels = filterByProperty(makes, 'typeID', this.value);
populateSelect($('#sMake').get(0), $.map(theModels, function(make) { return { name: make.name, value: make.makeID} }));
$('#sMake').trigger('change');
});
// populating 3nd select list
$('#sMake').bind('change', function() {
var theSeries = filterByProperty(model, 'makeID', this.value);
populateSelect($('#sModel').get(0), $.map(theSeries, function(model) { return { name: model.name, value: model.modelID} }));
});
});
</script>
</head>
<body>
Enter values, click submit, and look at the post parameters
<form method="get" action="index.php">
<div id="selection">
<select id="sType" name="type_id" style="{width=75px}"></select>
<select id="sMake" name="make_id" style="{width=75px}"></select>
<select id="sModel" name="model_id" style="{width=75px}"></select>
</div>
<input type="submit">
</form>
</body>
</html>
सूचना है कि मेरे समाधान कार्यक्षमता बदलाव ताकि मेकअप मॉडल 2 और 3 पाठ बक्से, और प्रकार (घरेलू, आयात, नाव, आदि) स्तर 1 हैं: यहाँ JSON डेटा है।अच्छा फॉर्मेटिंग बनाए रखने के दौरान मुझे बॉयलरप्लेट जेएस 23 लाइनों (कम टिप्पणियों) तक मिला।
जेएसओएन डेटा एसक्यूएल प्रश्नों से प्रस्तुत करना बहुत आसान है, जो जावा लिस्ट में इनिट पर कैश किए जाते हैं क्योंकि टाइप-मेक-मॉडल शायद ही कभी बदलता है। मैं किसी गतिशील AJAX का उपयोग नहीं करता क्योंकि यह आर्किटेक्चर को जटिल बनाता है, और मेरे पास उपलब्ध मूल्यों की अपेक्षाकृत छोटी सूची है, इसलिए मैं इसे पृष्ठ अनुरोध पर भेजता हूं।
"समाधान जितना संभव हो सके सरल होना चाहिए, लेकिन कोई आसान नहीं होना चाहिए" - ए आइंस्टीन
आपके उत्तर में किए गए प्रयासों के लिए धन्यवाद। मैंने आपके कोड की कोशिश की और यह काम किया, लेकिन मेरे पास अभी यह जानने के लिए समय नहीं है कि यह कैसे काम करता है ... बाद में वापस आ जाएगा..लेकिन मैं सरणी संरचना का उपयोग कर रहा हूं ... और मुझे लगता है कि अब मैं समझें कि इन सरणी कैसे बनाएं। धन्यवाद फिर से –
डेटा संरचना वास्तव में एक जावास्क्रिप्ट वस्तु है। आप यहां एक सभ्य JSON ट्यूटोरियल पा सकते हैं: http://www.hunlock.com/blogs/Mastering_JSON_%28_JavaScript_Object_Notation_%29 – BalusC
इसके लिए $ .grep और $ .map का उपयोग करना केवल स्वामी स्ट्रोक है। शानदार समाधान, मैंने इसे कुछ समान के आधार के रूप में उपयोग किया और इसके लिए एक बेहतर प्रोग्रामर की तरह महसूस किया। बहुत बढ़िया समाधान। – hendrixski