2013-06-26 51 views
0

在这个问题上挠头。有一个弹出窗口,允许用户与它进行交互,即菜单等,如果他们想关闭点击/触摸(iPad等)。问题是如果我插入“e.preventDefault();”停止在弹出窗口及其父母后面的链接弹出停止在iPad上工作的内容,但在桌面浏览器上工作正常......e.preventDefault();没有在iPad上工作

有没有人有任何想法?

<div id="divQuickCartDialogOverlay"> 
    <div id="divQuickCartDialog"> 
     <div id="overlayQuickBasket"><!--SELECT MENUS, BUTTONS ETC HERE --></div> 
    </div> 
</div> 

<script language="javascript" type="text/javascript"> 
     $(document).ready(function() 
     { 
      // Initial call 
      setTimeout(basketExpiryCheck, 60000); 

      // old style quick basket 
      $('#divQuickCart').mouseleave(function() { 
       closeCart('mleave'); 
      }); 

      // hide cart dialog if user clicks on background div 
      $(document).on('click touchstart', function (e) 

      { 
       e.preventDefault(); 

       var container = $("#divQuickCartDialog"); 
       if (container.has(e.target).length === 0) 
       { 
        closeCartDialog(); 
       } 
      }); 

      checkBasketRefresh(); 
     }); 

    </script> 


<style> 
#overlayQuickBasket { margin:0 auto; } 
body, html { height:100%; } 
#divQuickCartDialog { height:100%;width:100%; } 
</style> 

<script> 
$(function() { 
    $('#overlayQuickBasket').each(function() { 

     $(this).parent().css('position', 'relative'); 
     $(this).css('position', 'absolute'); 
     $(this).css('top', '50%'); 
     $(this).css('left', '0px'); 
    }); 
    $(window).resize(function() { 

     var thisheight = Math.round(parseInt($('#overlayQuickBasket').outerHeight())/2); 
     $('#overlayQuickBasket').css('margin-top', '-' + thisheight + 'px'); 

     if(parseInt($('#overlayQuickBasket').outerHeight()) > parseInt($('#overlayQuickBasket').parent().outerHeight())) { 

      $('#overlayQuickBasket').parent().outerHeight($('#overlayQuickBasket').outerHeight()); 
     } 
    }).trigger('resize'); 
}); 
</script> 
+0

尝试'返回false' – anmarti

+0

IPad有自己的“tap”功能来代替“悬停”,所以它无法识别外部点击。它会工作,如果你ü点击另一个悬停元素。我没有找到任何工作。 – Rajiv007

+0

returnfalse;导致同样的问题 @ Rajiv007我有touchstart引用 它也禁止所有内容即等一旦我关闭弹出窗口以及 – mehgc

回答

0

你可以尝试,而不是:

集属性的tabIndex为格#divQuickCartDialog:只是风格

<div id="divQuickCartDialog" tabindex="-1"> 
    ... 
</div> 

CSS,设置outline 0:

#divQuickCartDialog { 
    outline:0; 
    height:100%; 
    width:100%; 
} 

然后更换你的文件clicktouchstart处理方式:

$("#divQuickCartDialog").on('blur', function(){ 
    closeCartDialog(); 
}); 

#divQuickCartDialog被打开,你必须设置就可以了focus

+0

$(“#divQuickCartDialog”)上(“点击触摸” ,函数(E) { 变种容器= $( “#divQuickCartDialog”);如果 (container.has(e.target)。长度=== 0) { closeCartDialog();} 返回false ; }); on('blur')不能正常工作,因此修改了您的解决方案(tab-index或outline不是必需的)。像台式机和iPad上的梦想一样工作..尽管如此,大拇指让我获得解决方案的大部分途径 – mehgc