ex.9 選單事件·多重事件綁定
一般選單想要有移入移出效果,利用更換中英文也是其中一種效果。
ex.9 練習
index.html
1 | <div id="menu"></div> |
menu.html 加上 data-*
屬性
1 | <a href="#" data-english="First">第一</a> |
all.js
1 | $(function () { |
- mouseenter 跟 mouseleave 本來是兩個事件,使用
on
合併成一個事件處理。 - var temp = $(this).text(); 把目前選單擷取中文暫存到 temp 變數裡。
- $(this).text($(this).data(“english”)); 把目前的選單文字換成 data-english 裡的英文字。
- $(this).data(“english”, temp); 把原本存在 temp 變數裡的中文字,替換到 data-english 裡面。
- 滑入執行一次替換,滑出又在執行一次,用
on
就可以合併一次執行
- 若多個事件執行相同 function,可使用
on
方法來綁定多個事件。 data
方法可以取得或設定 HTML5 中的data-*
屬性內容。find
方法可以從原本選取器底下尋找元素並回傳新選取器。
text()
取出文字 / text(e)
寫進參數。data
取值比較快,效能快 / data-*
會把值寫進畫面,效能慢又大。
ex.10 選單事件-多重事件判断
用來判斷移入移出效果及點擊事件。
ex.10 練習
index.html / menu.html 同 ex.9
all.js
1 | $(function () { |
- if (e.type != “click”) e.type是目前的狀態,用
!=
不等於 click 事件。 - 不等於 click 事件也就是 ex.9 練習的滑入滑出動作。
- else 就是點擊後要處理的事件,也就是點擊後連結頁面去。
- e.preventDefault(); 讓原本 a 的超連結取消作用
- 大部分 function 都有回傳參數,可提供事件詳細資訊或操作方法。
e.type
方法可以判斷目前事件是由哪一個發生。
ex.11 選單事件-使用 on 註冊事件
用on來綁定事件,用於註冊之後產生的元素身上。
ex.11 練習
index.html / menu.html 同 ex.9
all.js
1 | $(function() { |
- $(“#menu”).on(“mouseenter mouseleave click”, “a”, function(e) 使用
on
預先綁定 a。 - $(“#menu”).load(“menu.html”); 把等於
load
事件移出先綁定事件,獨立操作。
- 選取器綁定事件必須要選取目前存在元素。
- 使用
on
方法傳入三個參數來綁定之後才會產生元素的事件。
非同步不一定是由上往下順序處理程序,處理較費時功能的幾乎是非同步操作。
等待完成後才會執行回呼函式 ( callback function )。
同步非同步參考筆記
AJAX非同步大解密 (筆記)
sync 同步 & async 非同步
ex.12 選單事件-使用 off 移除事件
用 off 來移除綁定事件,用會員勾選同意與否來判斷是否要移除事件。
ex.12 練習
index.html
1 | <div class="outbox"> |
all.js
1 | $(function () { |
- $(“#checkbox”).change(function () 表單使用
change
判斷狀態,有無勾選。 - if ($(this).is(“:checked”)) 使用
is
檢查 this 本身的選擇器有無等於 :checked,有就執行勾選事件。 - $(“#register”).off(“click”); 在沒勾選時,用
off
移除按鈕的 click 事件 - .change(); 因為瀏覽器本身會記憶表單,回上頁都會記錄,按鈕本身狀態會記錄,但程式並沒有紀錄,所以必須每次載入強迫重新使用。
- 使用
off
方法可以移除綁定事件,off()
會移除全部同樣事件。 - 若只想移除某個 click 事件,綁定事件的時候可以設定事件命名空間,例:click.name。
- change 方法若不帶入 function 則表示立即觸發該事件。