2012-07-27 102 views
2

我已经使用phoneGap打包了我的JQM应用(android & ios)。它工作正常,但显示出一个像背景点击/点击事件发生的问题是一些情况。 即如果我点击弹出窗口中的按钮,点击传播到后台按钮。 我该如何预防? 目前我已经在弹出窗口后面设置了一个叠加层,并为叠加层设置了一些延迟(我不认为这是一个好方法),但底部标签栏显示相同的问题,因为叠加层不能放在这里。JQM背景点击问题

+2

当我使用JQM simplemodal并显示jquery datepicker时,我有类似的问题。 “日”点击触发模式窗口下方的按钮。我尝试了不同的Z-index,但是失败了 – Anooj 2013-04-08 06:05:20

回答

1

我发现了一个解决方案,它在调用弹出窗口时将带有可点击元素的事件绑定到函数。像这样:

function callPopupWindow(){ 
    $('#list li a').bind('click',function(e){ 
    e.preventDefault(); 
    //steps to do 
    e.stopImmediatePropagation(); 
    $('#list li a').unbind('click');//if not unbinded it will trigger one more event with the elements. 
    }); 
} 

它适用于所有浏览器(iphone,andriod,当然还有firefox和chrome)。

1

使用event.stopPropagation()来防止事件冒泡DOM树,阻止任何父处理程序被通知事件。

SEE EXAMPLE FIDDLE

显示按钮点击一个<div>和隐藏它<body> click事件

编辑:

jquery stopPropagation problem with live method

  • 01提取个处理程序是对文件
  • 事件处理程序的顺序执行,他们被束缚于任何给定 元素

你需要停下来检查的传播,因为我们是在同一水平。 .stopPropagation()可以防止冒泡的发生,但这并不重要,它在DOM中处于同一级别,因此您需要使用.isPropagationStopped()检查它是否停止。另外,由于处理程序按顺序触发,所以您需要将该document.onclick绑定到其他事件处理程序之后,否则它将在其他人试图停止传播之前先执行。

+0

我的弹出窗口的点击事件是通过现场事件处理的。我发现了一个jquery文档,说event.stoppropagation不适用于现场活动。 http://api.jquery.com/event.stopPropagation/ – 2012-07-27 10:33:45

+1

@muhammedbasil:看到这篇文章:http://stackoverflow.com/questions/3353275/jquery-stoppropagation-problem-with-live-method这将是有益的。 – 2012-07-27 10:37:05

+0

@ muhammedbasil:更新了我的回答 – 2012-07-27 10:42:37