fastclick插件 導致 input[type="date"] 無法觸發問題解決方案


鄙人才疏學淺,新人一枚,不足之處還請諒解,寫下這個也只是為了給大家分享一下我解決這個BUG的方法,也是自己的一個筆記。

 

首先,我們使用fastclick插件的初衷是解決“tap”事件“點透”的BUG;fastclick與tap都是利用“touch”事件來模擬“click”事件的;

然后我們來大致的了解一下fastclick的工作原理(來自網上的copy):

在我們的app中跟蹤所有的TouchStart事件,在接收到touchend事件的時候,觸發一個click事 件;

使用方法可找度娘;

但是問題來了,當使用了fastclick的時候,我們發現“日期”控件無法被觸發了,是正常的點擊時無法被觸發,如果長按0.5S的樣子還是可以觸發的,但是問題還是已經存在,必須解決!

通過閱讀fastclick的源碼發現里面有個這個方法

/**
* On touch end, determine whether to send a click event at once.
*
* @param {Event} event
* @returns {boolean}
*/
FastClick.prototype.onTouchEnd = function(event) {

反正意思在上面也提到過,就是在接受到touchend事件的時候,觸發一個click事件;

那么我的解決方法就是:

當touchend的時候我們判斷一下他的event.target到底是啥,如果是date我們就不玩了,不要你fastclick了,用原生的去觸發不就OK了,來個return false;

我的代碼:

FastClick.prototype.onTouchEnd = function(event) {

  /*加上這個*/

  if(event.target.hasAttribute("type") && event.target.getAttribute("type") == "date"){
    return false;
  }

這里if里面的條件就隨便寫咯,自己根據項目需求而定,反正你要的是到達某個特殊的條件時給他退出就好了;

鄙人才疏學淺,新人一枚,不足之處還請諒解,寫下這個也只是為了給大家分享一下我解決這個BUG的方法,也是自己的一個筆記。

!!轉載還請確保是最新版本,謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM