1

构建一个 Web 应用程序并且无法触发点击事件。从普通的 Safari 实例运行时,它可以完美运行,但从主屏幕运行时,它会失败。

$("a.applink").live('click', clickHandler);
var clickHandler = function(e) {
    console.log(e);
    e.preventDefault();
}

从主屏幕运行时,“e”为空。如果我将 'click' 替换为 'touchend',它确实有效,但 touchend 没有给出正确的行为(即,如果您碰巧触摸了一个链接来开始滚动,它会触发意外的点击)。

对此有适当的解决方案吗?

4

3 回答 3

2

我是这样做的:

本质上,当您浏览页面时,您将点击或滚动。(嗯,还有其他的东西,比如捏和滑动,你可以稍后弄清楚)......

所以点击你的“touchstart”之后会跟着一个“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'

这样,如果你点击你会得到动作,如果你滚动什么都不会发生,但滚动..

于 2012-08-31T16:18:44.983 回答
0

首先定义clickHandler函数,一旦它被声明,然后$("a.applink").live('click', clickHandler);立即使用,您在声明之前将 clickHandler 绑定到事件,

注意:此模式中的顺序很重要。

var clickHandler = function(e) {
    console.log(e);
    e.preventDefault();
}

jQuery(function(){
    $("a.applink").live('click', clickHandler);
})

或者

像这样更改您的代码

jQuery(function(){
    $("a.applink").live('click', clickHandler);
});

function clickHandler (e) {
    console.log(e);
    e.preventDefault();

}
于 2012-08-31T16:36:30.767 回答
0

我知道这个答案有点晚了,但万一其他人偶然发现了这个问题:

cursor: pointer;如果您通过 JS 使元素“可点击”,则添加到元素的样式中。这将告诉 iOS 触发点击事件。

一般来说,使用触摸事件可能会干扰滚动。

于 2014-08-29T15:50:27.533 回答