後端 PHP 輸出兩個 JS 陣列:province(省份)與 city(城市,含所屬省份 ID),前端根據選中的省份 ID 篩選城市並動態填充第二個 <select>。
<?php
header('Content-Type: application/json; charset=utf-8');
// 假設從資料庫讀取
$provinces = [
['ProvinceID' => 1, 'ProvinceName' => '廣東省'],
['ProvinceID' => 2, 'ProvinceName' => '廣西省'],
];
$cities = [
['ProvinceID' => 1, 'CityID' => 10, 'CityName' => '廣州市'],
['ProvinceID' => 1, 'CityID' => 11, 'CityName' => '深圳市'],
['ProvinceID' => 2, 'CityID' => 20, 'CityName' => '南寧市'],
['ProvinceID' => 2, 'CityID' => 21, 'CityName' => '桂林市'],
];
echo json_encode([
'province' => $provinces,
'city' => $cities
]);
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>
<form id="locationForm">
<select id="province" name="province"><option value="">請選擇省份</option></select>
<select id="city" name="city" disabled><option value="">請先選擇省份</option></select>
</form>
<script>
let provinceData = [], cityData = [];
// 1. 獲取數據
$.getJSON('api/regions.php', function(res) {
provinceData = res.province;
cityData = res.city;
initProvince();
});
function initProvince() {
const $prov = $('#province');
$prov.empty().append('');
provinceData.forEach(p => {
$prov.append(``);
});
}
$('#province').on('change', function() {
const pid = $(this).val();
const $city = $('#city');
$city.empty().append('').prop('disabled', !pid);
if (!pid) return;
cityData.filter(c => c.ProvinceID == pid).forEach(c => {
$city.append(``);
});
});
</script>
<select> 加上 aria-label,確保鍵盤可操作。