如何防止第一次单击时的链接操作,并允许仅使用jquery进行第二次单击

时间:2016-10-07 07:12:54

标签: jquery

我正在努力寻找类似于我之前已经发布的一个问题的解决方案,这个问题没有准确的解决方案。

如果您在移动设备上查看此网站:http://www.adfinity.co.za/business-partners/。如果您第一次在“关于我们菜单项”下单击时会看到它,它将显示子项...并且仅显示当您第二次单击时,它将转到“关于我们”页面。 我寻找其他一些问题,但他们并没有真正做到这一点。

几天前我发布了一个类似的问题但没有最终答案: How to prevent menu from click function and active double click only

请帮我为我的网站做这件事。

现在我试过了:

$(document).ready(function (){      
   $("ul#primary-menu > li.menu-item-has-children").one("click", function(e)     {
       e.preventDefault();
       $(this).text("Click again to open");
   });
});

当我在实际的手机上测试时,不得不双击该项目,只有这些子项才会被删除。

3 个答案:

答案 0 :(得分:1)

您的代码应该可以工作,只要确保也返回false,并检查浏览器控制台以查看jQuery中是否有任何错误:

$(document).ready(function (){      
   $("ul#primary > li.menu-item-has-children").one("click", function(e)     {
       e.preventDefault();
       $(this).text("Click again to open");

       return false;    

   });
});

答案 1 :(得分:0)

这个怎么样:

当您点击其他地方时,点击次数将返回0.基本上,我为body添加了点击事件,以便在每次有人点击时进行检查,如果点击的目标与存储的目标匹配,则代码将会运行

$(function(){
  var clickedOnce = undefined;
  $(".twice-btn").click(function(e){
    e.preventDefault();
    var $this = $(this),
        $oTarget = e.target;
    if (clickedOnce !== $oTarget) {
      setTimeout(function(){ //this setTimeout is just to delay this action after the body click event handler
        clickedOnce = $oTarget;
      }, 0);
    }
  });
  $("body").on("click", function (e) {
    if (e.target == clickedOnce)
      window.location = $(e.target).attr("href");
    clickedOnce = undefined;
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="twice-btn" href="http://example.com">Click me!</a>
<a class="twice-btn" href="http://example.com">Click me too!</a>

如果您要将用户发送出去,可以在clickedOnce = undefined

之后删除clickedOnce = $oTarget并添加任何提醒(例如“再次点击到xxx”)

答案 2 :(得分:0)

您的代码几乎没问题,因为您的CSS选择器实际上与您的HTML DOM结构相匹配。我说几乎,因为您实际操作的是li元素,而不是a,因此调用this.text("Click again to open")实际上会替换li的内容有效地删除{ {1}}元素。
享受以下片段:

a
$(document).ready(function (){      
   $("ul#primary-menu > li.menu-item-has-children > a").one("click", function(e)     {
       e.preventDefault();
       $(this).text("Click again to open");
   });
});