2.4_點選事件(click)應用
透過click事件,點選相鄰(siblings)的二個按鈕,來達到切換背景樣式的效果。

透過click事件,點選相鄰(siblings)的二個按鈕,來達到切換背景樣式的效果。


點選按鈕來切換背景顏色

解說Event何時用(click,hover)等事件

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.00.06.71.jpg

目標:使用者點擊二個按鈕,來切換背景顏色

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.01.59.71.jpg

新增day.css和night.css,分別加入不同的背景顏色設定

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.02.21.71.jpg

index.html導入外部css檔案-day.css

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.02.39.04.jpg

運行結果,可看到樣式為day.css的黃色背景

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.02.41.88.jpg

全域變數及閉包應用

介紹全域變數 var someVar,myVar和window.myVar意思一樣

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.03.19.71.jpg

介紹閉包,(function(){})和myFunc一樣,只是呼叫函式的寫法而已

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.03.48.71.jpg

測式按鈕是否被點按?

測試按鈕是否被點按?

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.05.07.71.jpg

在google chrome中,呼叫console視窗的方法(ctrl+shift+i)

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.05.17.58.jpg

在console視窗中,看到log訊息"Button was clicked"

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.05.24.71.jpg

解說this的用法

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.05.45.71.jpg

點按按鈕後,可看到console視窗的log訊息

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.05.52.71.jpg

解說為何此this指定的是該點選的元件<button>Night</button>

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.05.59.71.jpg

解說this並不是jquery物件,如使用this.text('changed')會出錯

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.07.03.54.jpg

輸出畫面,顯示錯誤訊息

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.07.08.71.jpg

修改成$(this).text('change')便可成功運行//使用$()將this轉化為jQuery物件

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.07.13.71.jpg

運行結果,按鈕的text值被成功修改的畫面

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.07.17.33.jpg

dom搜尋結果,統一由一變數代表

假設有許多的<ul>要轉化為jQuery物件,寫一堆$('ul')很沒效率

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.08.16.71.jpg

寫成 var uls=$('ul');之後有需要用到jQuery物件的指令都使用該變數即可,如uls.click(),uls.find()

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.08.34.71.jpg

取得和修改<link>的屬性-href的值,以改變樣式

目標,取得<link>的屬性href的值

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.09.42.71.jpg

目標:修改<link>的屬性href的值,以改變樣式

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.09.56.71.jpg

輸出畫面,點選任一按鈕後,背景樣式改變了

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.10.01.50.jpg

點選各別按鈕,判斷其text屬性,以切換不同樣式

目標:要如何指定特定的按鈕來執行特定的動作呢?
var stylesheet//取得目前點選的按鈕的text值

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.10.44.79.jpg

由於是給程式判斷用,統一為小寫會較好判斷

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.10.54.38.jpg

運行牱果,點選大寫的Day按鈕,取得小寫的day

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.10.57.71.jpg

轉為小寫後,直接用按鈕的文字來指定css檔案

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.11.05.58.jpg

運行結果,透過不同按鈕來切換樣式的功能成功

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.11.08.71.jpg

運用data-file屬性,來判斷不同按鈕

//使用data-file的屬性設定樣式值

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.11.40.71.jpg

說明如要自行設定屬性也可以,
如<button data-jeffy=""></button>

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.11.55.71.jpg

//改為讀取data-file的屬性

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.12.10.71.jpg

運行結果,成功透過data-file來切換背景樣式的功能

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.12.14.96.jpg

使用方法data來取得data-file的值

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.12.44.71.jpg

運行結果,成功運行

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.12.49.29.jpg

//不需要每次點按時都呼叫jQuery一次,所以先將變數存好
var link=$('link');

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.13.38.71.jpg

運行結果,成功運行

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.13.47.71.jpg

//變數前統一加$符號,以認出它是jQuery物件--var $this=$(this)

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.14.51.71.jpg

將按鈕設為disabled

//讓按鈕按一下就不能按了
$this.attr('disabled','disabled');

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.14.59.71.jpg

運行結果,點按過的按鈕就不能按了

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.15.09.71.jpg

使用siblings()來切換相鄰2個按鈕,來交互移除disabled屬性

解說siblings的用法//<button>day</button和<button>night</button>互為相鄰關系(siblings)

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.15.34.71.jpg

//移除隔壁按鈕的disable屬性
$(this).siblings('button').removeAttr('disabled');

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.16.06.46.jpg

運行結果,可看到Day的按鈕點按後,Night按鈕的disable屬性就移除了

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.16.13.04.jpg

運用var 和 , 來宣告多個變數

使用 符號",",來宣告多個變數。
//此段程式碼
var $this=$(this),
stylesheet=$this.data('file');
//等同於以下寫法
var $this=$(this);
var stylesheet=$this.data('file');

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.16.50.71.jpg

變數執行多個方法時,運用分行及階層式的寫法,使閱讀更明確

$this//目前點按的按鈕,如<button>day</button>
.siblings('button')//跳至隔壁的按鈕,如<button>night</button>
.removeAttr('disabled')//移除disabled的屬性
.end()//返試原先點按的按鈕,如<button>day</button>
.attr('disabled','disabled')//設定屬性為disabled,如<button disabled="disabled">day</button>

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.18.21.71.jpg

運行結果,成功運行

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.18.28.71.jpg

on的應用

解說$('button').click等同於$('button').on('click',function(){})

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.19.09.71.jpg

運行結果,成功運行

/images/coding-note/javascript/jQuery-30day/04.Events-101/04.Events-101-0.19.39.71.jpg