javascript避免dom事件重複觸發

Joseph_Bee發表於2018-09-25

/**
* 為指定控制元件新增限制性事件, 該事件在觸發之後, 會被移除, 並在指定的時間間隔後, 重新繫結, 適用於避免控制元件事件被誤操作重複觸發的場景
* @param {String} domID 要新增事件的控制元件ID
* @param {String} eventName 要新增的事件, 例如: click, dblclick, 不可寫成onclick, ondblclick
* @param {Function} callback 觸發事件所要執行的函式, 對於有引數的函式, 需要包含在一個匿名函式中, 匿名函式中是對目標函式的呼叫, 對於無引數函式, 直接傳目標函式名稱即可
* @param {Number} interval 事件的時間間隔, Number型別或String型別的數字皆可
*/
function addLimitedEvent( domID, eventName, callback, interval ) {
  var _dom = document.getElementById( domID );

  if ( Number.isNaN( Number.parseInt( interval ) ) )
    interval = 1;
  else
    interval = Number.parseInt( interval );

  if ( _dom.addEventListener )
    _dom.addEventListener( eventName, removeLimitedEvent );
  else
    _dom.attachEvent( `on` + eventName, removeLimitedEvent );

  function removeLimitedEvent() {
    callback();

    if ( _dom.removeEventListener )
      _dom.removeEventListener( eventName, removeLimitedEvent );
    else
      _dom.detachEvent( `on` + eventName, removeLimitedEvent );

    setTimeout( function () {
      addLimitedEvent( domID, eventName, callback );
    }, interval * 1000 );
  }
}

 

/*函式使用方法*/

addLimitedEvent(`btn_Test`,`click`,function(){handler(`a`,`b`)},1);

addLimitedEvent(`btn_Test`,`click`,handler,1);

相關文章