前幾天我看到商業周刊的囚犯的兩難這本書介紹,標題這樣寫「母親、愛人同時有難,只能擇一的情況下,你該就誰?」這樣的賽局理論,我也曾用於婚姻的路上,不過一開始老婆不選我,選母親,我差一點離開她,後來因為我的堅持慶幸她改變選擇而成功。今天我在讀ASP.NET AJAX Control慨然嘆曰: 既生瑜,何生亮?作者也是跟著jQuery私奔為愛走天涯了,朋友們你是否也在掙扎要學C或jQuery呢?今天我會勸你看看jQuery吧,因為實在是快,而我們要繼續分享jQuery UI的選單小工具或小組件(widget)。
jQuery UI Menu 是個分門別類管理資料的好用工具,可以大大節省版面空間並使資料井井有條,例如用來導覽公司網頁中的產品型錄等等,記得以前都要用一堆CSS 與Javascript 才能做出這種功能,現在用jQuery UI 很簡單就能實現了。
Menu Widget新增於版本 1.9
說明:使用滑鼠跟鍵盤來互動瀏覽的主題化選單。
快速瀏覽範例
方法
擴充點
選單可以從任何有效的標記來建立只要內容有嚴格的父/子關係,大部分常用的元素是無序列表 (<ul>
):
<ul id="menu"> <li>Item 1</li> <li>Item 2</li> <li>Item 3 <ul> <li>Item 3-1</li> <li>Item 3-2</li> <li>Item 3-3</li> <li>Item 3-4</li> <li>Item 3-5</li> </ul> </li> <li>Item 4</li> <li>Item 5</li> </ul>
如果你使用結構而不是<ul>
/<li>
,含括選單跟選單項目使用相同的元素,使用menus
選項來指定一個方法區分這兩個元素,例如, menus: "div.menuElement"。
任何選單項目可以使用ui-state-disabled
類別到元素來停用。
圖示
要新增圖示到選單,把他們加進標記中:
1
2
3
|
<ul id="menu"> <li><span class="ui-icon ui-icon-disk"></span>Save</li> </ul> |
選單對沒有圖示的項目會自動加入需要的填充。
分隔
分隔元素可以加入沒有關係的選單項目來建立,這些項目只包含空格且/或線條:
1
2
3
4
5
|
<ul id="menu"> <li>Item 1</li> <li>-</li> <li>Item 2</li> </ul> |
鍵盤互動
ENTER
/空格:調用獲得焦點的選單項目之操作,可以開啟子選單。↑UP:移動焦點到前一個選單項目。
↓DOWN:移動焦點到下一個選單項目。
→RIGHT:如果可以開啟子選單。
←LEFT:關閉目前的子選單,移動焦點到父選單項目,如果不是在子選單,什麼也不做。
ESCAPE退出鍵:關閉目前的子選單,移動焦點到父選單項目,如果不是在子選單,什麼也不做。
輸入一個字母移動焦點到第一個項目,這個字元是其標題的開始字元,透過匹配項目來重複相同字元的循環,在一秒的計時內輸入更多的字元來匹配那些字元。
停用的項目可以獲得鍵盤的焦點,但是不允許任何其他的互動。
主題化
選單控制項使用 jQuery UI CSS架構來設計它的外觀跟感覺,如果需要選單的指定樣式,下面的CSS類別名稱可以使用:
ui-menu
:選單的外部容器,如果選單有圖示,這個元素會有另一個ui-menu-icons類別。
ui-menu-item
:個別選單項目的容器。ui-menu-icon
:透過
icons選項來設定子選單圖示。
ui-menu-divider
:選單項目間的分隔元素。
相關程式庫
補充事項:
- 這個控制項需要一些功能的CSS,否則無法運作,如果你建置一個訂製的主題,使用控制項的指定CSS檔案作為起點。
選項
disabled型態:Boolean
false
程式範例:
指定disabled
選項來初始化選單:
1
|
$( ".selector" ).menu({ disabled: true }); |
初始化後,取得或設定disabled
選項:
1
2
3
4
5
|
// getter var disabled = $( ".selector" ).menu( "option", "disabled" ); // setter $( ".selector" ).menu( "option", "disabled", true ); |
icons型態: Object
{ submenu: "ui-icon-carat-1-e" }
用於子選單的圖示,符合由jQuery UI CSS架構提供的圖示。
- submenu (string, default: “ui-icon-carat-1-e”)
程式範例:
指定icons
選項來初始化選單:
1
|
$( ".selector" ).menu({ icons: { submenu: "ui-icon-circle-triangle-e" } }); |
初始化後,取得或設定icons
選項:
1
2
3
4
5
|
// getter var icons = $( ".selector" ).menu( "option", "icons" ); // setter $( ".selector" ).menu( "option", "icons", { submenu: "ui-icon-circle-triangle-e" } ); |
position型態: Object
{ my: "left top", at: "right top" }
of
選項是父選單項目的預設選項,你可以指定另一個元素給位置,如需了解各種選項的更多細節,請查看jQuery UI Position 工具。程式範例:
初始化有指定position
選項的選單:
1
|
$( ".selector" ).menu({ position: { my: "left top", at: "right-5 top+5" } }); |
初始化後取得或設定position
選項:
1
2
3
4
5
|
// getter var position = $( ".selector" ).menu( "option", "position" ); // setter $( ".selector" ).menu( "option", "position", { my: "left top", at: "right-5 top+5" } ); |
role型態: String
"menu"
定義用於選單跟選單項目的ARIA roles(※註:參閱WAI-ARIA ),預設情況下選單項目使用"menuitem",
設定role
選項給"listbox"會使用
"option"作為選單項目,如果設為
null
,沒有角色會設定,如果選單是由另一個有焦點的元素控制的話,會有有用。
role
選項在初始化後不應該被修改,現有的(子)選單跟選單項目不能被更新。程式範例:
初始化有指定role
選項的選單:
1
|
$( ".selector" ).menu({ role: null }); |
初始化後取得role
選項:
1
2
|
// getter var role = $( ".selector" ).menu( "option", "role" ); |
方法
blur( [event ] )傳回值: jQuery (plugin only)
blur
事件。-
event型態: Event觸發選單的事物給blur。
程式範例:呼叫blur方法:
1
|
$( ".selector" ).menu( "blur" ); |
collapse( [event ] )傳回值: jQuery (plugin only)
-
event型態: Event觸發選單的事物給關閉。
程式範例:呼叫collapse方法:
1
|
$( ".selector" ).menu( "collapse" ); |
collapseAll( [event ] [, all ] )傳回值: jQuery (plugin only)
程式範例:呼叫collapseAll方法:
1
|
$( ".selector" ).menu( "collapseAll", null, true ); |
destroy()傳回值: jQuery (plugin only)
-
這個方法不接受任何參數。
程式範例:呼叫destroy方法:
1
|
$( ".selector" ).menu( "destroy" ); |
disable()傳回值: jQuery (plugin only)
-
這個方法不接受任何參數。
程式範例:呼叫disable方法:
1
|
$( ".selector" ).menu( "disable" ); |
enable()傳回值: jQuery (plugin only)
-
這個方法不接受任何參數。
程式範例:呼叫enable方法:
1
|
$( ".selector" ).menu( "enable" ); |
expand( [event ] )傳回值: jQuery (plugin only)
-
event型態: Event觸發選單的事物來展開。
程式範例:呼叫expand方法:
1
|
$( ".selector" ).menu( "expand" ); |
focus( [event ], item )傳回值: jQuery (plugin only)
focus
事件。程式範例:呼叫focus方法:
1
|
$( ".selector" ).menu( "focus", null, menu.find( ".ui-menu-item:last" ) ); |
instance()傳回值: Object
擷取選單的實例物件,如果元素沒有相關的實例,傳回undefined。
不像其他控制項方法,instance()在選單外掛載入後可以安全地呼叫任何一個元素。
-
這個方法不接受任何參數。
程式範例:呼叫instance方法:
1
|
$( ".selector" ).menu( "instance" ); |
isFirstItem()傳回值:jQuery (plugin only)
-
這個方法不接受任何參數。
程式範例:呼叫isFirstItem方法:
1
|
var firstItem = $( ".selector" ).menu( "isFirstItem" ); |
isLastItem()傳回值:jQuery (plugin only)
-
這個方法不接受任何參數。
程式範例:呼叫isLastItem方法:
1
|
var lastItem = $( ".selector" ).menu( "isLastItem" ); |
next( [event ] )傳回值: jQuery (plugin only)
-
event型態: Event觸發焦點的事物到移到。
程式範例:呼叫next方法:
1
|
$( ".selector" ).menu( "next" ); |
nextPage( [event ] )傳回值: jQuery (plugin only)
-
event型態: Event觸發焦點的事物到移動。
程式範例:呼叫nextPage方法:
1
|
$( ".selector" ).menu( "nextPage" ); |
option( optionName )傳回值: Object
optionName
相關的值。-
optionName型態: String要取得的選項名稱。
範例程式:呼叫此方法:
1
|
var isDisabled = $( ".selector" ).menu( "option", "disabled" ); |
option()傳回值:PlainObject
-
該方法不接受任何參數。
程式範例:呼叫此方法:
1
|
var options = $( ".selector" ).menu( "option" ); |
option( optionName, value )傳回值:jQuery (plugin only)
optionName
相關聯的選單選項的值。程式範例:呼叫此方法:
1
|
$( ".selector" ).menu( "option", "disabled", true ); |
option( options )傳回值: jQuery (plugin only)
-
options型態: Object要設定的選項-值對的映圖。
程式範例:呼叫此方法:
1
|
$( ".selector" ).menu( "option", { disabled: true } ); |
previous( [event ] )傳回值: jQuery (plugin only)
-
event型態: Event觸發焦點的事物到移動。
程式範例:呼叫previous方法:
1
|
$( ".selector" ).menu( "previous" ); |
previousPage( [event ] )傳回值: jQuery (plugin only)
-
event型態: Event觸發焦點的事物到移動。
程式範例:呼叫previousPage方法:
1
|
$( ".selector" ).menu( "previousPage" ); |
refresh()傳回值: jQuery (plugin only)
refresh()方法來初始化。
-
這個方法不接受任何參數。
程式範例:呼叫refresh方法:
1
|
$( ".selector" ).menu( "refresh" ); |
select( [event ] )傳回值: jQuery (plugin only)
select
事件。-
event型態:Event觸發選擇的事物。
程式範例:呼叫select方法:
1
|
$( ".selector" ).menu( "select" ); |
widget()傳回值: jQuery
jQuery物件。
-
這個方法不接受任何參數。
程式範例:呼叫widget方法:
1
|
var widget = $( ".selector" ).menu( "widget" ); |
擴充點
選單小組件內建於widget factory可以被擴充,在擴充這個小組件時,你可以覆寫或是增加現有方法的行為,下面的方法被提供作為擴充點,跟上面所列的外掛方法有相同的API穩定性,關於小組件擴充的資訊可以參閱Extending Widgets with the Widget Factory。
事件
blur( event, ui )型態: menublur
程式碼範例:初始化帶有blur呼叫的選單:
1
2
3
|
$( ".selector" ).menu({ blur: function( event, ui ) {} }); |
繫結一個事件監聽器到menublur事件:
1
|
$( ".selector" ).on( "menublur", function( event, ui ) {} ); |
create( event, ui )型態: menucreate
注意:ui
物件是空的,這裡使用是為了與其他事件的使用有一致性。
程式碼範例:初始化有指定create呼叫的選單:
1
2
3
|
$( ".selector" ).menu({ create: function( event, ui ) {} }); |
繫結一個事件監聽器給menucreate事件:
1
|
$( ".selector" ).on( "menucreate", function( event, ui ) {} ); |
focus( event, ui )型態: menufocus
程式碼範例:初始化有指定focus呼叫的選單:
1
2
3
|
$( ".selector" ).menu({ focus: function( event, ui ) {} }); |
繫結一個事件監聽器給menufocus 事件:
1
|
$( ".selector" ).on( "menufocus", function( event, ui ) {} ); |
範例:
一個簡單的jQuery UI Menu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>menu demo</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css"> <style> .ui-menu { width: 200px; } </style> <script src="//code.jquery.com/jquery-1.10.2.js"></script> <script src="//code.jquery.com/ui/1.11.1/jquery-ui.js"></script> </head> <body> <ul id="menu"> <li>Item 1</li> <li>Item 2</li> <li>Item 3 <ul> <li>Item 3-1</li> <li>Item 3-2</li> <li>Item 3-3</li> <li>Item 3-4</li> <li>Item 3-5</li> </ul> </li> <li>Item 4</li> <li>Item 5</li> </ul> <script> $( "#menu" ).menu(); </script> </body> </html> |
1 則留言