Рассмотрим следующий код.
$(function() {
var options = [
[{
label: "Select Header",
val: ""
}, {
label: "Opt A",
val: "a"
}, {
label: "Opt B",
val: "b"
}, {
label: "Opt C",
val: "c"
}],
[{
label: "Select Subject",
val: ""
}, {
label: "Opt D",
val: "d"
}, {
label: "Opt E",
val: "e"
}, {
label: "Opt F",
val: "f"
}],
[{
label: "Select Topic",
val: ""
}, {
label: "Opt G",
val: "g"
}, {
label: "Opt H",
val: "h"
}, {
label: "Opt I",
val: "i"
}]
];
function updateOptions(trg, data) {
trg.html("");
$.each(data, function(k, item) {
$("<option>", {
value: item.val
}).html(item.label).appendTo(trg);
})
}
function clearOptions(trg) {
trg.html("");
trg.hide();
}
$("#select-1").change(function() {
var sel = parseInt($(this).val());
if (isNaN(sel)) {
return false;
}
updateOptions($("#select-2"), options[sel]);
$("#select-2").parent().fadeIn();
});
$("#select-2").change(function() {
$("#myForm button[type='submit']").prop("disabled", false);
});
$("#myForm").submit(function(e) {
e.preventDefault();
var myData = $(this).serialize();
console.log(myData);
$(this)[0].reset();
clearOptions($("#select-2"));
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="myForm">
<label>Select Option: </label>
<select id="select-1" name="select-option-1">
<option></option>
<option value="0">Header</option>
<option value="1">Subject</option>
<option value="2">Topic</option>
</select>
<span class="hidden-select" style="display: none;">
<select id="select-2" name="select-option-2">
</select>
</span>
<br />
<button type="submit" disabled="disabled">Save</button>
</form>
Поскольку вы не указали HTML в своем Посте, я должен сделать некоторые предположения относительно того, почему ваш скрипт не работает. .serialize()
использует атрибут Name, так что это будет мое первое подозрение, что ваши HTML элементы формы не имеют всех правильных атрибутов.