2015-06-11 6 views
0

Я изо всех сил пытаюсь отключить событие браузера по умолчанию. Ничто из того, что я нашел в Google, не оказало никакой помощи. У меня есть только Android 4.4.4 для мобильных и Chrome dev для тестирования. Я пробовал исправления CSS, такие как webkit-touch-callout и другие, но, видимо, они не работают для Android, также они не работают в инструментах Chrome dev. Я также попытался обнаружить правый щелчок, (e.button == 2), он не работает.Отключить событие по умолчанию по умолчанию, перекрестное устройство

Я придумал решение, но оно решает одну проблему и создает другую. Я просто хочу иметь настраиваемое действие для события «длительное нажатие» для выбранных якорей, и я не хочу, чтобы всплывающее окно по умолчанию отображалось (открывается на новой вкладке, копирует адрес ссылки и т. Д.) Это то, что я сделал:

var timer; 
var tap; 

$("body").on("touchstart", my_selector, function(e) { 
    e.preventDefault(); 
    timer = setTimeout(function() { 
     alert('taphold!'); 
     tap=false; 
    },500); 
}); 

$("body").on("touchend", my_selector, function() { 
    if(tap) alert('tap'); 
    else tap=true; 
    clearTimeout(timer); 
}); 

Он успешно отключает событие taphold по умолчанию и контекстное меню не отображается. Однако он также отключает полезные события, например, салфетки. Ссылки находятся в вертикальном меню, а меню выше экрана, поэтому пользователю нужно прокручивать его. Если он попытается прокрутить, начиная с якоря, он не будет прокручиваться, он будет предупреждать «нажмите!».

Любые идеи о том, как я могу отключить отключение по умолчанию или как я могу исправить этот код, чтобы он отключил только события «кратковременного нажатия» и опустил события по умолчанию, связанные с удалением?

Редактировать: Теперь я подумал об установке тайм-аута, если указатель находится в том же месте, что позволяет говорить 100 мс, а затем предотвратить действие по умолчанию. Однако e.preventDefault(); не работает внутри setTimeout callback.

Итак, теперь я просто спрашиваю про самый простой пример. Могу ли я предотвратить действия по умолчанию после определенного количества времени (пока прикосновение все еще есть).

И это моя проблема в скрипке. http://jsfiddle.net/56Szw/593/ Это не мой код, я получил от этого http://www.gianlucaguarini.com/blog/detecting-the-tap-event-on-a-mobile-touch-device-using-javascript/

Обратите внимание, что в то время как ударяя коробку вверх и вниз, прокрутка не работает.

ответ

5

У меня есть решение. Это было так просто! Я не знал, что есть событие oncontextmenu. Это разрешает все:

$("body").on("contextmenu", my_selector, function() { return false; }); 
Смежные вопросы