2016-11-22 4 views
3

У меня есть веб-приложение, которое использует множество обработчиков событий $(document).on('click', selector, ...), и я хотел бы переключить их все на событие «touchstart», но я хочу, чтобы избежать каких-либо пузырей событий или дублирование в любом случае.Лучший способ переключить события click to 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

 Смежные вопросы

  • Нет связанных вопросов^_^