构建Web应用程序并且无法触发点击事件。它从正常的Safari实例运行时效果很好,但是当从主屏幕运行时,它会失败。
$("a.applink").live('click', clickHandler);
var clickHandler = function(e) {
console.log(e);
e.preventDefault();
}
从主屏幕运行时,'e'为空。如果我将'click'替换为'touchend',它确实有效,但是touchend没有给出正确的行为(例如,如果您碰巧触摸链接以启动滚动,则会触发意外点击。)
对此有适当的解决方案吗?
答案 0 :(得分:2)
我是这样做的:
基本上,当您浏览页面时,您将点击或滚动。 (还有其他的东西,比如捏和幻灯片,你可以稍后弄清楚)......
因此,点按“触摸启动”后会出现'touchend' 在滚动条上,您的'touchstart'后面会出现'touchmove'
在其他版本上使用Jq 1.7 ...可以使用.bind()
function nextEvent() {
//behaviour for end
$(this).on('touchend', function(e){
/* DO STUFF */
$(this).off('touchend');
});
//behaviour for move
$(this).on('touchmove', function(e){
$(this).off('touchend');
});
}
$(element).on('touchstart', this, nextEvent);
基本上,当'touchstart'发生时,我将动作绑定到'touchend'和'touchmove'。
'Touchend'会做任何我想要点击的事情然后解除绑定 'Touchmove'基本上什么都不做,除了解开'touchend'
这样一来,如果你点击进行动作,如果你滚动没有任何事情,但滚动..
答案 1 :(得分:0)
首先定义clickHandler
函数,一旦声明它,然后立即使用$("a.applink").live('click', clickHandler);
将clickHandler绑定到事件声明之前,
注意:此模式中的订单很重要。
var clickHandler = function(e) {
console.log(e);
e.preventDefault();
}
jQuery(function(){
$("a.applink").live('click', clickHandler);
})
OR
像这样编辑你的代码
jQuery(function(){
$("a.applink").live('click', clickHandler);
});
function clickHandler (e) {
console.log(e);
e.preventDefault();
}
答案 2 :(得分:0)
我知道这个答案有点迟了但是其他人偶然发现了这个问题:
如果要通过JS创建“可点击”元素,请将cursor: pointer;
添加到元素的样式中。这将告诉iOS触发点击事件。
一般来说,使用触摸事件可能会影响滚动。