Trying to build a chained select form, I've done this when the I have a required number of selects using $.ajax requests using .on('change'), but things are starting to get out of control when I need to display more than 4 dropdown choices that may or may not exist based on prior selections. Is there a way to refactor this code using promises or something else. Maybe point me in the right direction? Here's an example code snippet.
$('#model').on('change',function(){
var modelID = $(this).val();
var yearsetID = $('#year').val();
var makesetID = $('#make').val();
if(modelID){
$.ajax({
url:'lib/ajaxData.php',
type: "POST",
data:{
"action" : 'getsubmodels',
"makeset_id" : makesetID,
"yearset_id" : yearsetID,
"model_id" : modelID
},
dataType: "html",
success:function(html){
if (html) {
// found a submodel
$('#submodel').html(html);
$('#submodel').on('change',function(){
var submodelID = $(this).val();
var yearsetID = $('#year').val();
var makesetID = $('#make').val();
var modelsetID = $('#model').val();
$.ajax({
type:'POST',
url:'lib/ajaxData.php',
data: {
"action" : 'getbodytypes',
"year": yearsetID,
"make" : makesetID,
"model" : modelsetID,
"submodel" : submodelID
},
success:function(html){
// found a bodytype
if(html) {
$('#bodytype').html(html);
$('#bodytype').on('change',function(){
//more dropdowns
}
}
}
});
});
}else{
//no submodel
}
}
});
}else{
$('.product').html('Select Some Values');
}
});
EDITED to show HTML
Here's what the HTML looks like, some dropdowns are hidden unless that option is available.
<div class="select-boxes row">
<div class="small-12 medium-1 columns">
<select name="year" id="year">
<option value="">Year </option>
</select>
</div>
<div class="small-12 medium-1 columns">
<select name="make" id="make">
<option value="">Make</option>
</select>
</div>
<div class="small-12 medium-1 columns end">
<select name="model" id="model">
<option value="">Model</option>
</select>
</div>
<div class="small-12 medium-1 columns end submodel modifier" style="display:none;">
<select name="submodel" id="submodel">
<option value="">Submodel</option>
</select>
</div>
<div class="small-12 medium-1 columns end bodytype modifier" style="display:none;">
<select name="bodytype" id="bodytype">
<option value="">BodyType</option>
</select>
</div>
<div class="small-12 medium-1 columns end enginetype modifier" style="display:none;">
<select name="engine" id="engine">
<option value="">EngineType</option>
</select>
</div>
<div class="small-12 medium-1 columns end drivetype modifier" style="display:none;">
<select name="drive" id="drive">
<option value="">DriveType</option>
</select>
</div>
</div>