2015-05-24 20 views
0

我有这个功能.....jQuery函数导致DoubleClick和不一致

$(document).ready(function() { 
    var state = false; 
    $(".navbtn").click(function() { 
     if(!state){ 
      $('#menu').multilevelpushmenu('expand'); 
      state = true; 
      $('.nav-toggle').addClass('active'); 
      $(this).removeClass('active'); 
     } 
     else{ 
      $('#menu').multilevelpushmenu('collapse'); 
      state = false; 
      $('.nav-toggle').removeClass('active'); 
      $(this).addClass('active'); 
     } 
    }); 
}); 
//ALLOWS CLICK ON THE BODY TO CLOSE THE MENU// 
$('#colorscreen').click(function(){ 
     $('#menu').multilevelpushmenu('collapse'); 
     $('.nav-toggle').removeClass('active'); 
      $(this).addClass('active'); 
}); 

,让身体上的点击工作的一部分,做的一切,但在单击DIV #colorscreen当它执行的功能,但当我尝试再次使用navbtn打开菜单时,它需要双击。我错过了一些东西,但不知道有人可以帮忙吗?

...建议的前位,现在给我留下了这...

$(function() { // DOM ready shorthand 

    var state = false; 
    $(".navbtn").click(function() { 
     if(!state){ 
      $('#menu').multilevelpushmenu('expand'); 
      state = true; 
      $('.nav-toggle').addClass('active'); 
      $(this).removeClass('active'); 
     } 
     else{ 
      $('#menu').multilevelpushmenu('collapse'); 
      state = false; 
      $('.nav-toggle').removeClass('active'); 
      $(this).addClass('active'); 
     } 
    }); 
}); 
//ALLOWS CLICK ON THE BODY TO CLOSE THE MENU// 
$('#colorscreen').click(function(){ 
    $('#menu').multilevelpushmenu('collapse'); 
    state = false; 
    $('.nav-toggle').removeClass('active'); 
     $(this).addClass('active'); 

});

+0

...所以你的身体有'#colorscreen'?这至少是我能从你的代码中找出的。想想创建一个关于这个问题的简化演示? - 你有没有想过在身体点击时重置你的'状态'变量?另外,为什么你的''('#colorscreen').click(function(){'''document ready'外面?你不想让DOM上的'#colorscreen'选择器准备好吗? –

+0

谢谢你的支持洞察力,我如何重置状态变量,并在dom准备好颜色屏幕? – havingagoatit

+0

你的编辑与任何建议无关......如果你仔细观察 –

回答

1

你可以试试这个:

$(document).ready(function() { 
    var $navToggle = $('.nav-toggle'); 
    $(".navbtn").click(function() { 
     if($navToggle.hasClass('active')){ 
      $('#menu').multilevelpushmenu('collapse'); 
      $navToggle.removeClass('active'); 
      $(this).addClass('active'); 
     } 
     else{ 
      $('#menu').multilevelpushmenu('expand'); 
      $navToggle.addClass('active'); 
      $(this).removeClass('active'); 
     } 
    }); 

    //ALLOWS CLICK ON THE BODY TO CLOSE THE MENU// 
    $('#colorscreen').click(function(){ 
     $('#menu').multilevelpushmenu('collapse'); 
     $('.nav-toggle').removeClass('active'); 
      $(this).addClass('active'); 
    }); 
}); 
+0

这很有用,谢谢!有什么区别? – havingagoatit

+1

@havingagoatit您的州旗。 – Beginner

+0

那么你如何设法移除标志状态并仍然得到相同的结果? – havingagoatit

1

希望这将帮助你解决你的神秘:

按照state变量值:

$(function() { // DOM ready shorthand 

    var state = false;  // initially set to false, all right for now 

    $(".navbtn").click(function() { 
    if(!state){   // if state is faulty... 
     state = true; 
     // do this 
    } else{    // else... 
     state = false; 
     // do that 
    } 
    }); 

    $('#colorscreen').click(function(){ // (P.S. I'm also inside DOM ready! Yey!) 
    // do something 
    // Hey, what about our state variable??? 
    // If clicking #colorscreen you want it all like "back to default" 
    // than probably you want to set `state` variable also back to `false` 
    }); 

}); 

如果你按照正确的上方。 ..
您的代码现在应该如下所示:

$(function() { // DOM ready shorthand 

    var state = false;  // initially set to false, all right for now 

    $(".navbtn").click(function() { 
    if(!state){   // if state is faulty... 
     state = true; 
     // do this 
    } else{    // else... 
     state = false; 
     // do that 
    } 
    }); 

    $('#colorscreen').click(function(){ // (P.S. I'm also inside DOM ready! Yey!) 
    // do something 
    state = false; // back to false!!!! 
    }); 

}); // End of DOM ready. 
+1

感谢Rocko这真的很有帮助我会马上把它整合起来并向你汇报 – havingagoatit

+0

一眼就可以放弃使用document.ready就是你所指的 – havingagoatit

+1

@havingagoatit不,因为你可以清楚地看到我刚刚使用了更好的*速记*。 DOM准备好了还在吗?现在'$('#colorscreen').click(function(){'在DOM准备好的内部,看到? –