jQuery点击事件没有解雇 - ios主屏幕网络应用程序

时间:2012-08-31 16:00:43

标签: jquery ios events web-applications click

构建Web应用程序并且无法触发点击事件。它从正常的Safari实例运行时效果很好,但是当从主屏幕运行时,它会失败。

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

从主屏幕运行时,'e'为空。如果我将'click'替换为'touchend',它确实有效,但是touchend没有给出正确的行为(例如,如果您碰巧触摸链接以启动滚动,则会触发意外点击。)

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

3 个答案:

答案 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触发点击事件。

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