頁面包含兩個 <select> 下拉框:「項目類別」(一級)與「選擇已有商戶/銀行」(二級)。用戶選擇「商戶」或「銀行」後,二級下拉框需通過 AJAX 向後端請求對應數據並動態渲染。
<select id="categoryLevelOne" name="unitPropertiesOneLevel">
<option value="">請選擇</option>
<option value="merchant">商戶</option>
<option value="bank">銀行</option>
</select>
<select id="categoryLevelTwo" name="unitPropertiesTwoLevel">
<option value="">請先選擇一級分類</option>
</select>
<script>
$(function() {
$('#categoryLevelOne').on('change', function() {
var type = $(this).val();
var $levelTwo = $('#categoryLevelTwo');
$levelTwo.empty().append('<option value="">加載中...</option>').prop('disabled', true);
if (!type) {
$levelTwo.empty().append('<option value="">請先選擇一級分類</option>');
return;
}
$.ajax({
url: '/api/getSubCategories', // 後端接口
type: 'GET',
data: { categoryType: type },
dataType: 'json',
success: function(data) {
$levelTwo.empty().append('<option value="">請選擇</option>');
$.each(data, function(i, item) {
$levelTwo.append('<option value="' + item.code + '">' + item.name + '</option>');
});
$levelTwo.prop('disabled', false);
},
error: function() {
$levelTwo.empty().append('<option value="">加載失敗,請重試</option>');
}
});
});
});
</script>
@GetMapping("/api/getSubCategories")
@ResponseBody
public List<CategoryDTO> getSubCategories(@RequestParam String categoryType) {
// 根據 categoryType 查詢數據庫
// "merchant" -> 查商戶表
// "bank" -> 查銀行表
return categoryService.findByType(categoryType);
}
change 事件。merchant/bank)作為請求參數發送給後端。[{code: '001', name: '商戶A'}, ...],前端遍歷生成 <option>。debounce 減少請求頻率。