| 測試環境 | |
| JQuery版本 | jquery-1.11.1.min.js(jquery-2.1.1.min.js也可使用), jquery-ui-1.10.4.custom.min.js |
| 測試瀏覽器 | Chrome36.0,Firefox31.0 |
這個功能在一般網站上不算太常見,但是如果是在公司上班又是在寫程式的就會常看到了
因為User常會說「可不可以選完這個,然後自動勾選那個」..等
所以還是要來介紹一下今天這邊的寫法其實跟
「【JQuery操作Select標籤系列介紹】【應用篇】JQuery Select標籤連動checkbox元件」
這篇文章是大同小異,今天呢一樣稍微拿個範例來介紹,讓大家比較容易了解
這邊是拿早餐店點餐的套餐選取來做參考
早餐店可能每天都會提供不一樣的套餐方案,而每個套餐搭配的項目又不同
讓我們先來看看今天要用到的HTML Code吧
<p>
日期:
<select id="sel">
<option value="0">請選擇</option>
<option value="6">星期六</option>
<option value="7">星期日</option>
</select>
(每日提供不同餐點)
</p>
<p>
套餐別
<select id="sel2">
<option value="Null">請選擇</option>
<option value="A">套餐A</option>
<option value="B">套餐B</option>
<option value="C">套餐C</option>
<option value="D">套餐D</option>
</select>(選擇套餐可享優惠)
</p>
<div id="menu">
<table>
<tr>
<td>主餐餐點</td>
<td>飲料</td>
</tr>
<tr>
<td id="meals"></td>
<td id="drink"></td>
</tr>
</table>
</div>
我們可以看到今天這個範例是由兩個Select Tag還有一個Menu的Table組成
咦!?為什麼沒有看到radio選項呢?
因為我們的radio選項是透過JQuery動態產生的
至於產生的方法後面介紹Jquery Code的時候會說到,這邊就不說明了
先讓我們用意點點CSS來將Menu區塊稍微排版一下
table{
margin:20px 0 0 0;
border-collapse:collapse;
width:200px;
}
table td{
border:1px solid #000;
padding:5px;
text-align:center;
}
#meals, #drink{
text-align:left;
}
接著我們就開始進入最主要的JQuery部份了,程式說明請看下面註解
//在日期Select Tag值變更時執行事件
$("#sel").change(function(){
//將#sel的值帶入Switch作為判斷條件
switch (parseInt($(this).val())){
//當Switch值為0時執行
case 0:
//呼叫清除Menu的function
removeMenu();
break;
//當Switch值為6時執行(代表星期六)
case 6:
//呼叫清除Menu的function
removeMenu();
//在Table中ID為meals的TD區塊增加兩個radio選項
$("#meals").append(
"<input type='radio' class='vehicle' id='mea1' name='mea' value='0'>蘿蔔糕" +
"<input type='radio' class='vehicle' id='mea2' name='mea' value='1'>漢堡"
);
//在Table中ID為drink的TD區塊增加兩個radio選項
$("#drink").append(
"<input type='radio' class='vehicle' id='dri1' name='dri' value='10'>奶茶" +
"<input type='radio' class='vehicle' id='dri2' name='dri' value='11'>紅茶"
);
break;
//當Switch值為7時執行(代表星期日)
case 7:
//呼叫清除Menu的function
removeMenu();
//在Table中ID為meals的TD區塊增加兩個radio選項
$("#meals").append(
"<input type='radio' class='vehicle' id='mea21' name='mea2' value='0'>炒麵" +
"<input type='radio' class='vehicle' id='mea22' name='mea2' value='1'>三明治"
);
//在Table中ID為drink的TD區塊增加兩個radio選項
$("#drink").append(
"<input type='radio' class='vehicle' id='dri21' name='dri2' value='10'>咖啡" +
"<input type='radio' class='vehicle' id='dri22' name='dri2' value='11'>綠茶"
);
break;
}
});
function removeMenu(){
//刪除類別名稱為vehicle的radio選項
$(".vehicle").remove();
//清除#meals與#drink中的text文字
$("#meals, #drink").text("");
}
//在套餐別Select Tag值變更時執行事件
$("#sel2").change(function(){
switch($(this).val()){
case "Null":
//清除radio選項的Checked值
removeMenuRadio();
break;
case "A":
//呼叫selectRadio的function並賦予A套餐的值
selectRadio(parseInt($("#sel").val()), 0, 0)
break;
case "B":
//呼叫selectRadio的function並賦予B套餐的值
selectRadio(parseInt($("#sel").val()), 0, 1)
break;
case "C":
//呼叫selectRadio的function並賦予C套餐的值
selectRadio(parseInt($("#sel").val()), 1, 0)
break;
case "D":
//呼叫selectRadio的function並賦予D套餐的值
selectRadio(parseInt($("#sel").val()), 1, 1)
break;
}
});
//清除radio選項的Checkde值
function removeMenuRadio(){
//遍歷#meals與#drink下Type為radio的input元件
$("#meals input[type='radio'], #drink input[type='radio']").each(function(i,ele){
//取出符合條件的元件並設定給變數_text,再將元件賦予ID並指定給變數_id
var _text = $(ele),
_id = "#" + _text.attr("id") || "";
//刪除radio的Checked屬性(就是設置為未選取的狀態)
$(_id).removeAttr("checked");
});
}
//設定套餐的radio選項
function selectRadio(selval, a, b){
switch(selval){
case 6:
//設定主餐餐點
$('input[name="mea"]')[a].checked = true;
//設定飲料
$('input[name="dri"]')[b].checked = true;
break;
case 7:
$('input[name="mea2"]')[a].checked = true;
$('input[name="dri2"]')[b].checked = true;
break;
}
}
這邊要注意一下再SelectRadio的部分因為是用陣列的方式
去推算要設定為true的radio選項所以才會需要抓Name
因為ID本身是不可重複的(重複的話套用CSS跟JQuery都可能會有不明BUG)
最後讓我們來看看實際Dome會長怎樣吧!
Dome
See the Pen 【JQuery操作Select標籤系列介紹】【應用篇】JQuery Select標籤連動radio元件 by jen (@jen_huang) on CodePen.
沒有留言:
張貼留言