2015-05-24 54 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準備好的內部,看到? –