jQuery - 在iPad上调用两次click-event

时间:2010-12-31 11:40:47

标签: javascript jquery jquery-ui

我的网页应用程序是专为iPad设计的。 我使用jQuery和jQuery UI来拖动屏幕上的元素。因为在iPad上,默认情况下无法拖动元素,所以我添加了这个库:

http://code.google.com/p/jquery-ui-for-ipad-and-iphone/

包括它,我可以在iPad上拖放元素,但也会出现问题。我在draggable元素上也有一个div与图像,它应该是可点击的。

所以我整合了这些线:

$(document).ready(function() {
    $(".note").draggable();
    $('.closebutton').click(function() {
        alert("test");
    });
});

问题是,包括拖动库,警报消息test弹出两次或屏幕被冻结。

我在这里创建了一个完整的工作演示:

http://jsbin.com/oliwo/2/

在普通的桌面浏览器上,例如Firefox 4 Beta和Safari,它可以正常工作,只需在x - delete图像上单击鼠标即可显示一条test消息。在iPad上,我收到消息两次或屏幕冻结。

有人可以帮助我吗?非常感谢你提前和最诚挚的问候。

5 个答案:

答案 0 :(得分:5)

这不是真正的回应,因为我不知道为什么你有两次。但是,如果您确定您的点击事件是应该附加到此按钮的唯一点击事件行为,您可以尝试解决方法;在绑定之前创建一个unbind(),这将删除任何先前的单击绑定(因此,如果这次运行多次,您将只获得一个事件):

$('.closebutton').unbind().click(function() { ...

或更好:

$('.closebutton').unbind('click').click(function() { ...

答案 1 :(得分:4)

我发现在点击时显示警告框时,事件会被触发两次。我已经设法通过使用setTimeout来显示警告框来解决这个问题...

$("#myButton").unbind("click").click(function () {
   // Have to use a setTimeout else on iPhone the alert may appear twice in certain scenarios
   setTimeout(function () {  alert('The message'); }, 300);
   return false;  // Return false to prevent href being followed
});

答案 2 :(得分:0)

我不知道为什么,但如果我不使用alert消息,它就会起作用。我创建了新元素,然后在iPad和桌面Safari上只调用一次。

答案 3 :(得分:0)

我只在iPad上看到这个问题,也许某些版本的webkit相关。 unbind对我有用,而且我也读过这个只有jquery代码在body html标签中才存在,如果它在头部不是问题。

答案 4 :(得分:0)

只是简单地避免点击的传播

$("tr").live('click',function() {

        ...

        $( event.toElement ).one('click', function(e){ e.stopImmediatePropagation(); } );
    });