Google FastButton在iOS上点击两次

时间:2013-01-15 10:44:31

标签: javascript mobile-safari

使用MrMaksimize and Alex Blacks implementationGoogle FastButton时,我会在iOS中获得两次点击。

试试这个小提琴:http://jsfiddle.net/Cotten/zQsVZ/

var a = new FastButton(document.getElementById('a'), function() {
 alert('click');
});

<div id="a">First click me</div>
<div id="b">Then, click here and nothing should happen... but it does :(</div>
  • 放大结果窗格
  • 点击绿色按钮,显示警告
  • 按好,一切都很好
  • 然后单击红色或蓝色div,它们没有FastButton(..)
  • 再次发出警报:(

我在iPhone 4S iOS 6和带有iOS 5.1的iPad 3上出现这种错误行为。

在Android上它似乎有效。

我在jquery.tappable.js时遇到了同样奇怪的行为。

谢谢!

2 个答案:

答案 0 :(得分:0)

我遇到类似的问题here

我可以使用this解决方案修复它:

var clickObject = {
    flag: false,
    isAlreadyClicked: function () {
        var wasClicked = clickObject.flag;
        clickObject.flag = true;
        setTimeout(function () { clickObject.flag = false; }, 100);
        return wasClicked;
    }
};
var a = new FastButton(document.getElementById('a'), function() {
    if (!clickObject.isAlreadyClicked()) {
        alert('click');
    } else {
        return;
    }
});

我不确定它是否适用于您的快捷按钮实现,但它值得一试。我的实现看起来更像是这样:

$('#container').on('click touchstart', 'a.element', function(event) {
    if (!clickObject.isAlreadyClicked()) {
        alert('click');
    } else {
        return;
    }
});

祝你好运!

答案 1 :(得分:0)

我认为FastButton实现已经阻止了Ghostclick(超时几毫秒)。

我遇到了同样的问题,因为我认为问题可能在于你正在使用和警报(就像我一样)。出于某种原因(我没有深入研究代码),由于警报而导致另一个事件被触发。如果您只是尝试输出代码,请使用“console.log”,它是非阻塞而不是警报,您可能会看到第二个事件未被调用。

希望这个想法不是使用alert命令,但是如果是,请使用超时,这可以解决ghostclick的实现,我认为这无论如何都会破坏这种行为:

new FastButton(document.getElementById('a'), function() { 
       setTimeout('alert("hello");',500);
});

希望它有所帮助。

干杯,      米格尔