Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在单击事件中取消绑定默认值?_Javascript_Jquery_Mobile_Scroll_Nav - Fatal编程技术网

Javascript 在单击事件中取消绑定默认值?

Javascript 在单击事件中取消绑定默认值?,javascript,jquery,mobile,scroll,nav,Javascript,Jquery,Mobile,Scroll,Nav,我目前在创建移动导航时遇到了一些问题。这是一个简单的汉堡图标,当你点击它时,它会打开一个全屏菜单。问题是,当覆盖层可见时,我试图禁用滚动。现在我想我可以通过添加 $('body').bind('touchmove', function(e){e.preventDefault()}); 这只工作了一次,但当你再次关闭菜单时,默认设置仍处于活动状态,我不知道如何解除绑定,因为汉堡图标用于打开和关闭菜单 我在下面添加了我使用的完整js脚本 $(document).ready(function ()

我目前在创建移动导航时遇到了一些问题。这是一个简单的汉堡图标,当你点击它时,它会打开一个全屏菜单。问题是,当覆盖层可见时,我试图禁用滚动。现在我想我可以通过添加

$('body').bind('touchmove', function(e){e.preventDefault()});
这只工作了一次,但当你再次关闭菜单时,默认设置仍处于活动状态,我不知道如何解除绑定,因为汉堡图标用于打开和关闭菜单

我在下面添加了我使用的完整js脚本

$(document).ready(function () {
  $(".icon").click(function () {
    $('body').bind('touchmove', function(e){e.preventDefault()}); 
    $(".mobilenav").fadeToggle(500);
    $(".top-menu").toggleClass("top-animate");
    $(".mid-menu").toggleClass("mid-animate");
    $(".bottom-menu").toggleClass("bottom-animate");
  }); 
});

谢谢你的帮助

使用
.on()
.off()
jQuery方法很容易实现

$(document).on('touchmove', 'body', function(e){e.preventDefault()});
$(document).off('touchmove', 'body', function(e){e.preventDefault()});
但是还有一个
unbind()
函数

$('body').unbind('touchmove', function(e){e.preventDefault()});
代码示例:

$(document).ready(function () {

  var cancelScroll = function(e) { e.preventDefault(); }

  $(".icon").click(function () {
    if ($(".mobilenav").is(":visible")) {
      $('body').unbind('touchmove', cancelScroll); 
    } else {
      $('body').bind('touchmove', cancelScroll); 
    }
    $(".mobilenav").fadeToggle(500);
    $(".top-menu").toggleClass("top-animate");
    $(".mid-menu").toggleClass("mid-animate");
    $(".bottom-menu").toggleClass("bottom-animate");
  }); 
});
注意:从处理程序返回
false
相当于调用事件对象上的
.preventDefault()
.stopPropagation()

所以可能只是:

var cancelScroll = function() { return false; }

添加标志以区分并在关闭时解除绑定

 $(document).ready(function () {
  var isClose = false;
  $(".icon").click(function () {

    if(isClose){
      $('body').unbind('touchmove', function(e){e.preventDefault()}); 
      isClose = false;
    }else{
      $('body').bind('touchmove', function(e){ e.preventDefault();});
      isClose = true; 
    }
    $(".mobilenav").fadeToggle(500);
    $(".top-menu").toggleClass("top-animate");
    $(".mid-menu").toggleClass("mid-animate");
    $(".bottom-menu").toggleClass("bottom-animate");
  }); 
});

不幸的是,这不起作用。不过,我确实有了创建变量的想法。我对js不是很有经验,所以我看不出哪里出了问题。如果你能添加一个提琴,我可以看一下。问题是在手机上,我可以给你它所在的链接吗?如果你能与我分享上面代码(答案)的链接,我可以调试并告诉你。啊,我看到问题在另一个答案中得到了解决,感谢你的帮助。我知道这些函数,但我必须知道在我的脚本中添加它们的位置。因此,我不确定在哪里解除阻止默认绑定。感谢您的快速响应,但我遇到了与另一个答案相同的问题。解除绑定部分不起作用。请尝试改用.on()和.off()函数!而不是捆绑和解开?啊。我记得为什么的问题。您需要绑定和解除绑定完全相同的函数。但定义的函数不同。我的意思是-你需要把你的函数放入一个变量中。我会在1分钟内更新答案