Tooltip API 與教學文件參考 :
# https://jqueryui.com/tooltip/
# http://api.jqueryui.com/tooltip/
jQuery UI 參考書籍如下 :
- jQuery UI 使用者介面設計 (歐萊里, Studio Tib. 譯)
- jQuery UI 與 Plugin 開發實戰 (悅知文化, 吳哲穎譯)
- jQuery 全能權威指南 (上奇, 張亞飛)
- Pro jQuery 2.0 2nd ed. (Apress, Freeman Adam)
- jQuery UI in Action (Manning, TJ Vantoll)
- jQuery 應用程式設計極速上手 (上奇, 羅友志譯)
- 打造 jQuery 網頁風暴 (張子秋, 佳魁)
工具提示是 HTML 元素的 title 屬性所提供的功能, 當滑鼠移動到元素上 (hover) 時就會出現一個方框顯示訊息, 這對表單輸入非常有用, 可提醒使用者如何填寫, 但原始 HTML 的 title 提示功能有下列缺點 :
- 外觀與顯示時間, 時長以及位置無法控制.
- 顯示內容只能是純文字, 無法使用 HTML, 且顯示效果隨瀏覽器而異.
測試 1 : 原始的 HTML 元素 title 屬性提示效果 [看原始碼]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
.ui-widget {font-size:80%;}
</style>
</head>
<body>
<label for="account">帳號</label>
<input type="text" id="account" title="請輸入帳號"><br>
<label for="password">密碼</label>
<input type="password" id="password" title="請輸入密碼(英數字)">
<button title="提交">登入</button>
<script>
$(function(){
$("button").button();
});
</script>
</body>
</html>
結果如下 :
可見帶 title 屬性的 input 與 button 元素, 其提示訊息就是一個非常陽春的方框. 但若取得這些有 title 屬性元件的 jQuery 物件後呼叫 tooltip() 方法則可美化工具提示框, 並且有跨瀏覽器一致的視覺效果 :
$("input").tooltip();
$("buttont").tooltip();
或者用 document 取得 HTML 文件內的全部元素之 jQuery 物件集合, 這樣全部具有 title 屬性之元素都會套用工具提示效果 :
$(document).tooltip();
例如 :
測試 2 : 呼叫 tooltip() 初始化工具提示效果 : 提示內容寫在 title 屬性中 [看原始碼]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
.ui-widget {font-size:80%;}
</style>
</head>
<body>
<label for="account">帳號</label>
<input type="text" id="account" title="請輸入帳號"><br>
<label for="password">密碼</label>
<input type="password" id="password" title="請輸入密碼(英數字)">
<button title="提交">登入</button>
<script>
$(function(){
$("button").button();
$('input').addClass("ui-widget ui-widget-content ui-corner-all");
$('input').height($("button").innerHeight());
$(document).tooltip();
});
</script>
</body>
</html>
結果如下 :
可見當滑鼠移到每一個含有 title 屬性的元素時都會跳出具有陰影的美美提示了.
"jQuery UI in Action" 這本書裡提到即使是在呼叫 tooltip() 後才加入的元素仍然有效, 例如 :
測試 3 : 呼叫 tooltip() 初始化後再動態加入之元素仍然有效 [看原始碼]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
.ui-widget {font-size:80%;}
</style>
</head>
<body>
<script>
$(function(){
$(document).tooltip();
$('body').html("<input type='text' title='帳號'><br>");
$('body').append("<input type='text' title='密碼'>");
});
</script>
</body>
</html>
此例網頁中 body 內原本並無任何表單元素, 我們是在呼叫了 tooltip() 之後再呼叫 html() 與 append() 方法添加兩個 text input, 結果如下 :
jQuery UI 的工具提示元件提供了許多選項屬性可用來設定 tooltip 之功能, 其中比較重要的是 content 與 position, 分別用來設定提示內容與出現之位置.
在提示內容不一定要預先寫在元素的 title 屬性中, 可以在呼叫 tooltip() 初始化元素之工具提示功能時傳入含有 content 屬性之選項物件去設定, 其值可以是字串或函數, 此函數要 return 提示訊息字串 :
obj.tooltip({content: "提示訊息"});
obj.tooltip({content: function(){return "提示訊息"}});
例如 :
測試 4 : 呼叫 tooltip() 初始化工具提示效果 [看原始碼]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
.ui-widget {font-size:80%;}
</style>
</head>
<body>
<label for="account">帳號</label>
<input type="text" id="account" title=""><br>
<label for="password">密碼</label>
<input type="password" id="password" title="">
<script>
$(function(){
$("#account").tooltip({content: "<b>請輸入帳號</b>"});
$("#password").tooltip({
content: function() {return "<i>請輸入密碼(英數字)</i>";}
});
});
</script>
</body>
</html>
此例中兩個 text input 元素的工具提示訊息並非事先寫在 title 屬性中, 而是在呼叫 tooltip() 進行初始化時以 content 選項設定, 第一個 text input 的 content 屬性直接用字串, 第二個則用函數傳回字串, 這個做法的好處是可使用 HTML 語法來呈現提示內容, 因為在 title 屬性中無法使用 HTML 標籤, 結果如下 :
可見 content 中的粗體元素 b 與斜體元素 i 都顯現效果於提示訊息中. 注意, 雖然提示訊息改在 content 中設定, 但是 title 屬性還是必須存在, 因為 tooltip() 的作用對向必須具有 title 屬性, 只要賦予空值即可.
除了在初始化時用選項物件設定外, 也可以在初始化後用 option 方法來設定 content 屬性 :
obj.tootip("option", "content", "提示訊息")
obj.tootip("option", "content", "提示訊息")
測試 5 : 初始化後用 option 方法設定 content 屬性 [看原始碼]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
.ui-widget {font-size:80%;}
</style>
</head>
<body>
<label for="account">帳號</label>
<input type="text" id="account" title=""><br>
<label for="password">密碼</label>
<input type="password" id="password" title="">
<script>
$(function(){
$("#account").tooltip(); //一定要先初始化
$("#password").tooltip(); //一定要先初始化
$("#account").tooltip("option", "content", "<b>請輸入帳號</b>");
$("#password").tooltip("option", "content", "<i>請輸入密碼(英數字)</i>");
});
</script>
</body>
</html>
此例先呼叫 tooltip() 初始化後再呼叫 option 方法去設定 content 屬性, 結果與上面範例 4 一樣. 注意, 一定要先做初始化才能呼叫 option 方法, 否則會出現物件不存在之錯誤訊息. 同樣地, 表單元素中也一定要有 title 屬性.
工具提示元件預設會套用到具有 title 屬性的元素上, 但這可以在初始化時用 items 選項來設定, 例如 id 屬性可用 [id], 另外圖片的提示是放在 alt 屬性上則指定為 img[alt], 如果要指定到任何元素則用 * :
obj.tooltip({itmes: "[id]"}); //將提示套用到有 id 屬性的元素上
obj.tooltip({itmes: "img[alt]"}); //將提示套用到有 alt 屬性的 img 元素上
obj.tooltip({itmes: "*"}); //將提示套用到所有元素上
也可以在初始化後利用 option 方法設定 items 選項 :
obj.tootip();
obj.tootip("option", "items", "[id]");
例如 :
測試 6 : 初始將工具提示套用到所有元素上 [看原始碼]
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/hot-sneaks/jquery-ui.css" rel="stylesheet">
<style>
body {font-family: Arial, Helvetica, sans-serif;}
.ui-widget {font-size:80%;}
</style>
</head>
<body>
<label for="account">帳號</label>
<input type="text" id="account"><br>
<label for="password">密碼</label>
<input type="password" id="password">
<script>
$(function(){
$("#account").tooltip({
content: function() {return this.id},
items: "[id]"
});
$("#password").tooltip({
content: "<i>請輸入密碼(英數字)</i>",
items: "*"
});
});
</script>
</body>
</html>
此例中兩個 input 元素並無 title 屬性, 但透過初始化時以 items 屬性指定套用的對象, 前者為套用到有 id 屬性者 (items: "[id]"), 後者為套用到任何元素 (items: "*"), 這就更改了預設對象為具有 title 屬性者, 因此仍能正常顯示工具提示訊息, 如果少了 items 選項就不會顯示了, 結果如下 :
由於 id=account 的 input 元素其提示訊息為透過函數傳回本身 id, 故提示訊息為 account.
沒有留言 :
張貼留言