2012-05-08 3 views
2

Есть ли возможность переписать ссылки на мобильное веб-приложение из onclick, чтобы использовать Zepto? В настоящее время я хочу запустить команду $ .tap для каждого экземпляра onclick.Преобразование методов onClick для использования методов в Zepto

Например

<a href="#" tap="doSomething(); return false;">Link</a> 

Возможно ли это, или есть способ предотвратить OnClick от стрельбы, но взять метод OnClick и назвать его внутри метода $ .TAP?

Любые предложения по созданию быстрых кнопок с использованием Zepto?

+0

что-то вроде при нажатии .trigger ('onclick') – Huangism

+0

Да - но как вы можете предотвратить включение onclick при нажатии? – gregavola

+0

Вы имеете в виду, есть ли способ отключить его от перехода к ссылке? или есть где-то функция onclick, которую вы не хотите запускать? – Huangism

ответ

0

ОК, так что я понимаю вас, вы хотите, чтобы вы по-разному походили на мобильные и настольные, но с тем же кодом. Если да, то вам необходимо определить, какую платформу вы на то определить код

if(MOBILE) { 
    $('element').click(function(){ 
     return false; 
    }); 

    $('element').on('touchstart', function(){ 
     // functionality of the onclick written here 
    }); 
} 
else { 
// desktop event listeners 
} 
+0

Справа - но у меня есть хеширование, которое нужно уволить, например Page One - и я все еще хочу, чтобы это изменило URL.Будет ли false false сделать этот URL неверным? – gregavola

+0

Пожалуйста, избегайте 'live' ... использовать' on' вместо. – chowey

2

Более изящный способ будет хранить триггер щелчком в переменной, а затем переназначить эту переменную из «нажмите» на «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/

Имейте в виду, что этот код предполагает, что сенсорный экран устройства только сенсорный экран устройства; то есть телефон или планшет. Если вы на ПК с сенсорным экраном, вы не сможете использовать его с помощью мыши!

+0

+1 для JSFiddle Spike. – Shahul3D