2016-11-22 66 views
3

我有一個web應用程序,它使用大量的$(document).on('click', selector, ...)事件處理程序,我想將它們切換到'touchstart'事件,但我想避免任何事件冒泡或在任何情況下重複。最好的方法來切換點擊事件touchstart與jQuery

我想把所有這些分離成單獨的JS文件,但是,有很多這些文件利用上面提到的事件監聽器。

我感興趣的任何編程方式來實現這個,如果有的話?

我在想:

$('a, button, input').each(function() { 
    $(this).on('touchstart', this.click); 
}); 

但它可能是一個性能問題。

+0

嘗試兩個事件$(this).on('click touchstart',this.click);如果設備沒有點擊事件,它會觸發touchstart,反之亦然 – user1952854

+0

正如我所說的,我不想重複任何形式。我想強制在移動設備上使用touchstart,點擊桌面瀏覽器。 – omerowitz

回答

4

也許這是一個解決方案,讓您根據所使用的設備中實現的事件類型來決定使用哪個事件。我的做法主要是:

var clickEvent; 
 

 
if ('onpointerdown' in window) { 
 
    // use 'pointerdown' if pointerEvent API is supported 
 
    clickEvent = 'pointerdown'; 
 
    console.log('pointerEvents used'); 
 
} else if ('ontouchstart' in window) { 
 
    // use 'touchstart' if touch device 
 
    clickEvent = 'touchstart'; 
 
    console.log('touch device'); 
 
} else { 
 
    // else use mouse event 
 
    clickEvent = 'click'; 
 
    console.log('old fashioned mouse events'); 
 
} 
 

 
$(document).on(clickEvent, '#testbtn', function(e) { 
 
    $(e.target).css('color', 'red'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="testbtn"> Testbutton </button>

作品對我非常好。

+0

感謝Flyer53!迄今爲止,這有助於... – omerowitz