Более изящный способ будет хранить триггер щелчком в переменной, а затем переназначить эту переменную из «нажмите» на «touchstart» когда вы имеете дело с сенсорным устройством.
Здесь я использую глобальный переменный объект, myUtils, чтобы сохранить мое событие щелчка, который по умолчанию «нажмите» в качестве значения:
var myUtils = myUtils || {};
myUtils.events = myUtils.events || {
click : "click"
};
Если есть сенсорная обнаружено, то я меняю myUtils. events.click свойства иметь значение «touchstart»:
if (typeof document.body.ontouchstart !== "undefined") {
myUtils.events.click = "touchstart";
}
Теперь, когда я связывание моих событий щелчка к моим элементам, я использую свое свойство myUtils.events.click для имени события:
$(function() {
$("#link").bind(myUtils.events.click, function(e) {
alert("I'm a " + e.type);
e.preventDefault();
});
});
Таким образом, мне нужно сделать только «это сенсорный экран?». тест один раз в моем приложении, и я буду привязываться к «touchstart» или «click» по мере необходимости после этого. Мне не нужно беспокоиться об отмене нежелательного события кликов на мобильном устройстве, поскольку это событие никогда не связано в первую очередь.
Вызов e.preventDefault() предотвратит выполнение ссылки (предполагается, что #link является ссылкой href).
JSFiddle версия: http://jsfiddle.net/BrownieBoy/Vsakw/
Имейте в виду, что этот код предполагает, что сенсорный экран устройства только сенсорный экран устройства; то есть телефон или планшет. Если вы на ПК с сенсорным экраном, вы не сможете использовать его с помощью мыши!
что-то вроде при нажатии .trigger ('onclick') – Huangism
Да - но как вы можете предотвратить включение onclick при нажатии? – gregavola
Вы имеете в виду, есть ли способ отключить его от перехода к ссылке? или есть где-то функция onclick, которую вы не хотите запускать? – Huangism