jQuery UI 的 Spinner 事實上是 input 輸入框變身而來的, 其 HTML 部分必須要指定一個 id 屬性 :
<input id="spinner1">
在 jQuery 程式部分只要呼叫 spinser() 函數即可 :
$("spinner1").spinner();
例如 :
測試 1 : Spinner 測試 : 預設微調器 [看原始碼]
結果如下 :
按右方的上下鈕, 起始值為 1, 每次跳躍值為 1. 也可以按 Page Up 或 Page Down 鈕, 但每次跳躍值為 10.
上面所建立的 Spinner 並未傳入設定選項, 因此都用預設值來設定. 事實上 Spinner 有如下常用選項可變更其預設值 :
常用 options | 說明 |
min | 最小值 (預設 null) |
max | 最大值 (預設 null) |
step | 按上下鈕跳躍之數值 (預設 1) |
page | 按 Pg Up 與 Pg Dn 鈕時要跳躍的 step 數 (預設 10) |
disabled | 禁能 (True/False), 預設 False |
除了按 Spinner 上的上下按鈕調整數值外, 還可以按鍵盤上的 Page Up 與 Page Down 來調整, 注意, 其一次跳躍值是 page 乘以 step, 因為 page 屬性是指一次跳幾個 step 之意 (預設 10), 例如 :
測試 2 : Spinner 測試 : 傳入選項物件 [看原始碼]
jQuery 部分 :
var config={
min: 0,
max: 255,
page: 5,
step: 2
}
$("#spinner1").spinner(config);
此例 step=2, 按 Spinner 上面的上下鈕每次跳躍值為 2; 但若按 Page Up 與 Page Down 鍵, 則每次跳躍值為 page*step=5*2=10, 因 page 被改為 5 了, 若未設 page: 5, 則預設一次跳 10, 每按一次 PgUp 或 Pg Dn 會跳 10*2=20.
Spinner 的方法如下表 :
常用 method | 說明 |
value | 取得目前值或設定新值 |
option | 取得或設定屬性之值 |
disable | 禁能 (等於 disabled 屬性=True) |
enable | 致能 (等於 disabled 屬性=False) |
pageUp | 設定按下 PageUp 時跳幾個 page |
pageDown | 設定按下 PageDown 時跳幾個 page |
stepUp | 設定向上增加指定之 step 值 |
stepDown | 設定向下減少指定之 step 值 |
jQuery UI 元件 (widget) 的方法呼叫方式是將方法名稱以字串格式做為第一參數傳入, 只有一個參數時為 getter (有傳回值), 有兩個參數時為 setter (第二個參數為設定值) :
var ret=$("#id").widgetName("method"); //getter
$("#id").widgetName("method", value); //setter
但 option 方法有 2~3 個參數, 其第二參數為選項名稱, 第三參數為設定值 :
var opt=$("#id").widgetName("option", "optionName"); //getter
$("#id").widgetName("option", "optionName", value); //setter
例如 :
測試 3 : Spinner 測試 : option 方法 [看原始碼]
HTML 部分 : 同測試 1
jQuery 部分 :
var config={}
$("#spinner1").spinner(config);
$("#toggle").click(function(e) {
var text=$("#toggle").html();
if (text=="Disable") { //可用狀態
$("#spinner1").spinner("option", "disabled", true);
$("#toggle").html("Enable");
}
else { //不可用狀態
$("#spinner1").spinner("option", "disabled", false);
$("#toggle").html("Disable");
}
});
此例有一個按鈕, 初始顯示 Disable, 按一下會將 Spinner 禁能, 同時按鈕顯示也變成 Enable, 再按一下使 Spinner 致能, 按鈕恢復顯示 Disable, 如此反覆循環 (Toggle).
上面的範例也可以直接呼叫 disable 與 enable 方法來做, 例如 :
測試 4 : Spinner 測試 : disable 與 enable 方法 [看原始碼]
var config={}
$("#spinner1").spinner(config);
$("#toggle").click(function(e) {
var text=$("#toggle").html();
if (text=="Disable") {
$("#spinner1").spinner("disable");
$("#toggle").html("Enable");
}
else {
$("#spinner1").spinner("enable");
$("#toggle").html("Disable");
}
});
此例效果與上面範例三相同. 下面則是 stpUp 與 stepDown 方法之範例 :
測試 5 : Spinner 測試 : stepUp 與 stepDown 方法 [看原始碼]
var config={
min: 0,
max: 100
}
$("#spinner1").spinner(config);
$("#stepUp").click(function(e) {
$("#spinner1").spinner("stepUp", 5);
});
$("#stepDown").click(function(e) {
$("#spinner1").spinner("stepDown", 5);
});
此例有兩個按鈕 stepUp 5 與 stepDown 5 顧名思義一個按下去數值會往上跳 5, 另一個則是往下跳 5.
方法 pageUp 與 pageDown 用來設定一次要跳幾個 page (預設一個 page 為 10), 若 pageUp 設為 2, 表示按 Pg Up 鈕會跳 2*10 個單位 (1 個單位即 step 選項所定), 例如 :
測試 6 : Spinner 測試 : pageUp 與 pageDown 方法 [看原始碼]
var config={
min: 0,
max: 100,
step: 2
}
$("#spinner1").spinner(config);
$("#pageUp").click(function(e) {
$("#spinner1").spinner("pageUp", 2);
});
$("#pageDown").click(function(e) {
$("#spinner1").spinner("pageDown", 2);
});
此例 step 設為 2, 當按下按鍵時呼叫 pageUp 與 pageDown 並傳入 2, 表示要跳躍 2 個 page, 預設 1 個 page 為 10 個單位, 故每按一次跳 2*10=20 單位, 而每個單位為 step=2, 故每按一次跳 40.
下面為更改 page=5 範例 :
測試 7 : Spinner 測試 : pageUp 與 pageDown 方法 [看原始碼]
HTML 部分 :
<input id="spinner1">
<button id="pageUp" class="ui-button ui-widget ui-corner-all">pageUp 2</button>
<button id="pageDown" class="ui-button ui-widget ui-corner-all">pageDown 2</button>
jQuery 部分 :
var config={
min: 0,
max: 100,
page: 5
}
$("#spinner1").spinner(config);
$("#pageUp").click(function(e) {
$("#spinner1").spinner("pageUp", 2);
});
$("#pageDown").click(function(e) {
$("#spinner1").spinner("pageDown", 2);
});
此例 step 為預設值 1, 僅更改 page 由預設值 10 改成 5, 即每頁 5 個單位. 當按下按鍵時呼叫 pageUp 與 pageDown 並傳入 2, 表示要跳躍 2 個 page, 1 個 page 現在為 5 個單位, 故每按一次跳 2*5=10 單位, 而每個單位為 step=1, 故每按一次跳 10.
還有一個方法 value 用來設定或取得 Spinner 之值, 設定較少用, 取得較常用, 通常會與事件一起使用. Spinner 常用的方法如下表 :
常用 event | 說明 |
change | 值已改變且輸入框失焦時觸發 |
stop | 停止按 Spiiner 按鈕且輸入框失焦時觸發 |
start | 開始按 Spiiner 按鈕時觸發 |
spin | Spiiner 按鈕被按下時觸發 |
指定事件處理有兩種方式, 一是使用 jQuery UI 的方式 :
var handler=function(e, ui) {};
$("#widget_id").spinner({事件: handler}); //事件例如 spin
第二種方式使用 jQuery 的 on() :
var handler=function(e, ui) {};
$("#widget_id").on("事件", handler);
下面以調色盤為例說明 value 方法與 spin 事件之用法 :
測試 8 : Spinner 測試 : value 方法與 spin 事件處理 [看原始碼]
HTML 部分 :
<p>R <input id="red"></p>
<p>G <input id="green"></p>
<p>B <input id="blue"></p>
<div id="canvas" style="width:200px;height:100px;border-style:solid;">
jQuery 部分 :
var setcolor=function() {
var r=$("#red").spinner("value");
var g=$("#green").spinner("value");
var b=$("#blue").spinner("value");
var bgcolor="rgb(" + r + "," + g + "," + b + ")";
$("#canvas").css("background-color", bgcolor);
};
$("#red").spinner({min: 0, max: 255, spin: setcolor});
$("#green").spinner({min: 0, max: 255, spin: setcolor});
$("#blue").spinner({min: 0, max: 255, spin: setcolor});
此例 HTML 有三個 spinner 以及一個 div 畫布, 先定義一個 setColor 函數給 Spinner 的 spin 事件呼叫, 然後在呼叫 spinner() 時傳入含有 spin 事件屬性的設定物件即可.
上面範例是透過設定物件的 spin 物件指定一個 spin 事件的處理函數, 事實上也可以利用 jQuery 本身的 on() 方法綁定 spin 事件來達成同樣效果; 同樣地, Spinner 的取值除了用其 value 方法外, 也可以直接使用 jQuery 的 val() 方法, 例如 :
測試 9 : Spinner 測試 : value 方法與 spin 事件處理 [看原始碼]
HTML 部分 : 同測試 8
jQuery 部分 :
var setColor=function(e, ui) {
var r=$("#red").val();
var g=$("#green").val();
var b=$("#blue").val();
var bgcolor="rgb(" + r + "," + g + "," + b + ")";
$("#canvas").css("background-color", bgcolor);
};
var config={min: 0, max: 255};
$("#red").spinner(config);
$("#green").spinner(config);
$("#blue").spinner(config);
$("#red").on("spin", setColor);
$("#green").on("spin", setColor);
$("#blue").on("spin", setColor);
注意, 若監聽的是 stop 事件, 使用 on() 時傳入之第一參數為 "spinstop", 其餘事件對應如下表所示 :
Spinner event | jQuery on() 第一參數 |
spin | "spin" |
change | "spinchange" |
stop | "spinstop" |
start | "spinstart" |
例如將上面測試 9 改成 stop 事件觸發如下 :
測試 10 : Spinner 測試 : value 方法與 stop 事件處理 [看原始碼]
HTML 部分 : 同上
jQuery 部分 :
var setColor=function(e, ui) {
var r=$("#red").val();
var g=$("#green").val();
var b=$("#blue").val();
var bgcolor="rgb(" + r + "," + g + "," + b + ")";
$("#canvas").css("background-color", bgcolor);
};
var config={min: 0, max: 255};
$("#red").spinner(config);
$("#green").spinner(config);
$("#blue").spinner(config);
$("#red").on("spinstop", setColor);
$("#green").on("spinstop", setColor);
$("#blue").on("spinstop", setColor);
此例是停止增減時才觸發.
沒有留言 :
張貼留言