jQuery結合PHP+MySQL實現二級聯動下拉式清單[執行個體]

來源:互聯網
上載者:User

實現原理:根據省份值的變動,通過jQuery把sf_id傳給後台php檔案處理,php通過查詢MySQl資料庫,得到對應的地市名,並返回JSON資料給前端處理,即實現聯動效果!

為便於講解,這裡直接給出省份:河南省(sf_id=1) 浙江省(sf_id=2),而地市和學生資訊則分別建立兩張資料表!編碼方式均為:utf8!建立資料庫並執行以下SQL語句!

複製代碼 代碼如下:/* 地市表 */
create TABLE IF NOT EXISTS `dishi`(
`ds_id` int(3) auto_increment not null primary key,
`sf_id` int(3) not null default '0',
`ds_name` varchar(50) not null
);
/* 學生表 */
create TABLE IF NOT EXISTS `xuesheng`(
`xs_id` int(3) auto_increment not null primary key,
`ds_id` int(3) not null default '0',
`xs_name` varchar(50) not null
);接著搭個前台架子:

複製代碼 代碼如下:<table border="0" width="100%">
<tr>
<td width=100>省份</td>
<td>
<select name="sf_id" id="sf_id" title="選擇省份">
<option value="1">河南省</option>
<option value="2">浙江省</option>
</select>
</td>
</tr>
<tr>
<td>地市</td>
<td>
<select name="ds_id" id="ds_id" title="選擇地市">

</select>
</td>
</tr>
<tr>
<td>學生姓名</td>
<td><input type=text maxlength=20 name="xs_name" value=""></td></tr>
</table>

接著就是jQuery部分,詳解可看代碼後注釋部分: 複製代碼 代碼如下:<script language="JavaScript">
function getVal(){
$.getJSON("select.php",{sf_id:$("#sf_id").val()},function(json){
var ds_id = $("#ds_id");
$("option",ds_id).remove(); //清空原有的選項,也可使用 ds_id.empty();
$.each(json,function(index,array){
var option = "<option value='"+array['ds_id']+"'>"+array['ds_name']+"</option>";
ds_id.append(option);
});
});
}
//下面是頁面載入時自動執行一次getVal()函數
$().ready(function(){
getVal();
$("#sf_id").change(function(){//省份部分有變動時,執行getVal()函數
getVal();
});
});
</script>

其中的select.php就是關鍵區段了,此檔案接收前台通過$.getJSON方法傳遞過來的參數 sf_id,然後select.php根據省份sf_id擷取對應的地市資料,再返回JSON資料,前台通過jQuery將JSON資料進行處理,寫入<option>,即完成了聯動效果! 複製代碼 代碼如下:$sf_id = $_GET["sf_id"];
if(isset($sf_id)){
$q=mysql_query("select * from dishi where sf_id = $sf_id");
while($row=mysql_fetch_array($q)){
$select[] = array("ds_id"=>$row['ds_id'],"ds_name"=>urlencode($row['ds_name']));
}
echo urldecode(json_encode($select));
}

其中的urlencode()、urldecode()函數為防止中文資料庫內容亂碼!這裡還需要注意的是,select.php不得再有其它資料返回,免得JSON返回錯誤!

最後補充一下,有童鞋問這效果在新增學生資訊的時候能方便使用,如果有傳遞過來的學生資訊需要編輯時,不能直接顯示要編輯的學生所處的地市!這裡就需要加個判斷了:

首先將上面的:<select name="ds_id" id="ds_id" title="選擇地市"> </select>部分做個判斷 複製代碼 代碼如下:<select name="ds_id" id="ds_id" title="選擇地市">
<?php if( isset($_GET['ds_id']) ){//返回要編輯的學生所屬的地市
$sql="SELECT * FROM dishi WHERE ds_id=".$ds_id;
$resultds=mysql_query($sql,$conn);
while($listds=mysql_fetch_array($resultds)){ ?>
<option value="<?php echo $listds['ds_id'] ?>" <?php if( $listds['ds_id']==$ds_id ){ echo 'selected="selected"'; } ?> name="ds_id"><?php echo $listds['ds_name'] ?></option>
<?php } ?>
<?php } ?>
</select>

然後在頁面載入時,首次執行getVal()函數前做判斷,說明看注釋部分: 複製代碼 代碼如下:$().ready(function(){
//當$ds_id不為空白,表示載入修改狀態的表單,此時就不能在頁面載入時立即調用getVal()函數,以避免無法顯示要修改的賬目所在的收支分類
<?php if( empty($ds_id) ){ ?>//當$ds_id為空白,表示載入添加表單,此時要在頁面載入時立即調用getVal()函數,以顯示當前收支類型的子分類
getVal();
<?php } ?>
$("#sf_id").change(function(){
getVal();
});
});

好了,差不多結束吧!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.