停止做e.preventDefault();在第二次点击?

时间:2011-11-05 22:01:47

标签: jquery

对于我的生活,我似乎无法破解这一点。我是jQuery的新手,但我只想简单地说:

我正在处理的链接指向 / mypagename

  1. 首次点击a.nav_hidepanel,在#panel上触发动画,但不要让链接像往常一样运行。但是,添加.nav_returnlink的替换类,以便我们可以在下次定位
  2. 现在,第二次单击此链接时,它具有不同的类,因此我们希望允许它像往常一样运行并将用户发送到/ mypagename
  3. 禁用链接没有问题,但return true;似乎不起作用!我错过了一些明显的东西吗?

    jQuery(document).ready(function(){
        $("a.nav_hidepanel").click(function(e){
            e.preventDefault();
            $("#panel").animate({marginLeft:"-547px"}, 500 );
            $(this).removeClass('nav_hidepanel');
            $(this).addClass('nav_returnlink');
        });
    
        $("a.nav_returnlink").click(function(){
            return true;
        });
    });
    

6 个答案:

答案 0 :(得分:4)

由于元素在第一次点击后会有nav_returnlink类,只需检查它的存在:

jQuery(document).ready(function(){
    $("a.nav_hidepanel").click(function(e){
        //This will return true after the first click 
        //and preventDefault won't be called.
        if(!$(this).hasClass('nav_returnlink'))
            e.preventDefault();

        $("#panel").animate({marginLeft:"-547px"}, 500 );
        $(this).removeClass('nav_hidepanel');
        $(this).addClass('nav_returnlink');
    });
});

答案 1 :(得分:4)

以下是您编码无效的原因的简短说明:

  • 您将a.nav_hidepanel上的点击事件与preventDefault绑定这没关系
  • 将click事件绑定到当时不存在的元素a.nav_returnlink。 这是一个问题
  • 在第一次单击回调时,您调用e.preventDefault(),因为此click事件永远不会被绑定,此链接将永远不会执行它的默认操作。 这又是一个问题

这是一个可能的解决方案

jQuery(document).ready(function(){
  $("a.nav_hidepanel").click(function(e){
    e.preventDefault();
    $("#panel").animate({marginLeft:"-547px"}, 500 );
    $(this).removeClass('nav_hidepanel');
    $(this).addClass('nav_returnlink');
    $(this).unbind('click'); //unbind the click event so this is not called again
  });
  $("a.nav_returnlink").live(function(){ //use a live event to bind to this element, that is available in the future
      return true;
  });
});

另一种解决方案可能是在第一个回调中绑定新的click事件:

jQuery(document).ready(function(){
  $("a.nav_hidepanel").click(function(e){
    e.preventDefault();
    $("#panel").animate({marginLeft:"-547px"}, 500 );
    $(this).removeClass('nav_hidepanel');
    $(this).addClass('nav_returnlink');
    $(this).unbind('click');

    $(this).click(function(){
        //do whatever you like to do
    });
  });
});

答案 2 :(得分:1)

尝试使用jquery

在肝功能中添加click事件
$("a.nav_returnlink").live("click",function(){
   return true;
});

答案 3 :(得分:0)

为什么不使用计数器?

var clickCount = 0;
$("a.nav_hidepanel").click(function(e){
    if(clickCount == 0) {
        e.preventDefault();
        $("#panel").animate({marginLeft:"-547px"}, 500 );
    }
    clickCount++;
});

答案 4 :(得分:0)

你总是可以取消绑定事件处理程序....

var clickCancel = function(event) {
    event.preventDefault();
    $(this).unbind("click",clickCancel);
    $("#panel").animate({marginLeft:"-547px"}, 500 );// you add your animation in this function, it will only be called on  the first click..

};
$("a.nav_hidepanel").bind("click", clickCancel);

see here

答案 5 :(得分:0)