如何仅在单击时激活子菜单

时间:2016-10-06 08:43:50

标签: jquery css

我想为移动设备中的菜单执行以下操作: 只需单击一下,子项就会下拉。但是,双击,它应该直接到我的页面。 例如。关于项目有孩子,我也是一个链接,带我到关于页面。如果我单击它,子项应显示为块级元素。但如果我双击,它应该直接带我到它的链接(在这种情况下,到关于页面)。

我试过了:

$(document).ready(function (){            
    var clicks = 0;
   $( "ul#primary > li.menu-item-has-children" ).click(function( e ) {
     clicks++;
     if(clicks === 1)
     {
        e.preventDeafult();
        $("ul#primary > li.menu-item-has-children ul.sub-menu").css("display","block");
     }
     else if(clicks > 1) { 
        window.location($(this).attr("href"));       
     }                
   });   
});

显然,else语句正在执行。但是当我第一次点击时,子菜单不显示。

我也尝试使用slideToggle()而不是css属性,但它不起作用。 不幸的是,该网站仍然在测试域和密码保护,所以我不能粘贴这里的链接。 希望你能帮忙。

1 个答案:

答案 0 :(得分:1)

var DELAY = 700, clicks = 0, timer = null;
    $("p").dblclick(function(e){
         e.preventDefault();  //cancel system double-click event
    }).click("click",function(){
 
 clicks++;  //count clicks

        if(clicks === 1) {

            timer = setTimeout(function(e) {

                alert("Single Click");  //perform single-click action    
                clicks = 0;             //after action performed, reset counter

            }, DELAY);

        } else {

            clearTimeout(timer);    //prevent single-click action
            alert("Double Click");  //perform double-click action
            clicks = 0;             //after action performed, reset counter
        }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>Double-click or click.</p>

您需要点击和dblclick事件,如下所示,以完成您的工作 在点击事件中,您可以设置计时器以进一步增强它,请参阅已回答的问题@ Jquery bind double click and single click separately

 $(document).ready(function (){            

           $( "ElementToBEClicked" ).click(function( e ) {
               //Expand here your menu           

           }).dblclick(function(e){
                //Redirect to URL on double click 
            });   
        });

更新

<p>Double-click or click.</p>


var DELAY = 700, clicks = 0, timer = null;
    $("p").dblclick(function(e){
         e.preventDefault();  //cancel system double-click event
    }).click("click",function(e){

 clicks++;  //count clicks

        if(clicks === 1) {

            timer = setTimeout(function(e) {

                alert("Single Click");  //perform single-click action    
                clicks = 0;             //after action performed, reset counter

            }, DELAY);

        } else {

            clearTimeout(timer);    //prevent single-click action
            alert("Double Click");  //perform double-click action
            clicks = 0;             //after action performed, reset counter
        }
});