標籤:bin app 就會 null span event asc 知識 http
本文主要介紹點擊一個按鈕處理事件的一些特殊情況和技巧。
一、第一次點擊觸發一個函數,之後點擊都觸發另一個函數1、小白實現
2、大神實現
代碼如下:
<body><button>click me</button> <script> function bind(func1, func2) { let func = null return function() { (!func ? (func = func2, func1) : func).apply(this, arguments) } } $(‘button‘).click(bind(()=>{alert(1)}, ()=>{alert(2)})); </script></body>
說明2點:
1、let定義的變數是塊級的變數。
while(1){ let let1 = 2; var var1 = 2;}alert(let1); //不可訪問alert(var1); //可以訪問
2、(func = func2, func1)
javascript 逗號運算式,從左至右執行每個子運算式,並將最後一個子運算式的值作為整個運算式的值。=優先順序高於,(點擊瞭解更多)。所以這個運算式先將func2賦給func,然後整個運算式的值取func1。
二、 點擊按鈕只調用一次事件處理1、實現
同樣也可以通過判斷全域變數flag為是否為true來處理。
這裡介紹一個jquery的one方法。
$("button").one("click", function() { alert("This will be displayed only once.");});
瞭解更多可參考:http://www.jquery123.com/one/
原理就是當第一次觸發以後,我們就立即刪除該控制代碼。
// 注意:前提是我們已經定於好了addEvent/removeEvent函數// (定義好了才能使用哦) var myIntro = document.getElementById(‘intro‘);addEvent(myIntro, ‘click‘, oneClickOnly);function oneClickOnly() { alert(‘WOW!‘); removeEvent(myIntro, ‘click‘, oneClickOnly);} 2、實際應用
情境:工作中有遇到這種情況,如下,點“系統訊息”代表全部系統訊息都讀了。
之前做的就是click時調用readMsg(),事實上這樣每點擊一次就會觸發請求一次介面,可以通過只點擊一次來最佳化頁面效能。
//在點擊系統訊息tab的時候置為已讀 $("li[data-href=‘tabs02‘] h2").one("click", function() { readMsg("sys", "all"); });
本文作者starof,因知識本身在變化,作者也在不斷學習成長,文章內容也不定時更新,為避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.cnblogs.com/starof/p/4904929.html有問題歡迎與我討論,共同進步。
jquery按鈕綁定特殊事件