2014-11-05 73 views
0

我有一個自定義clickToggle功能jQuery的重啓切換功能

標籤1切換 - 開DIV 標籤第二切換 - 靠近格

第一次切換後,用戶還可以關閉通過點擊div外部的div,而不激活toggle2。下一次我想打開div時,它會在第二次切換時繼續,這是一個糟糕的錯誤。

所以基本上我問是否有反正我可以結束/中途重新啓動切換功能,以便如果用戶點擊div的外部,下一次我點擊選項卡它將在第一次切換開始而不是在第二次切換時繼續。

有沒有像重置,我可以做重新啓動切換功能?對此非常絕望,一直在尋找一天。

$(function() { 
    $("#toggle").clickToggle(function() { // toggle 1 open 
     $(".log").html("click Toggle1, show tab panel, isToggle = true"); 
     $("#toggle_content").animate({width:'toggle'},350); 
     $(".container").addClass("overlay-disable"); 

     // alternative exit(i want the toggle function to restart 
     // if this function runs, if not the next time i want to open the tab through 
     // toggle 1, it will continue at toggle 2 instead which is a bad bug as that 
     //was suppose to be a exit. 
     $(".container").click(function() { 
      $(".container").unbind("click").removeClass("overlay-disable"); 
      $(".log").html("panel hide success, isToggle = false"); 
      $("#toggle_content").hide(); 

     }); 
    },function() { // toggle 2 exit 
     $(".container").unbind("click").removeClass("overlay-disable"); 
     $(".log").html("click Toggle2, hide tab panel"); 
     $("#toggle_content").animate({width:'toggle'},350); 

    }); 
}); 

clickToggle是一個自定義插件,以每次2個功能之間切換,我單擊該選項卡,它的工作對順利剛剛開放和退出,但一旦我添加了一個替代出口我不能得到解決重啓如果激活備選出口,則切換功能返回到切換1。

小提琴:http://jsfiddle.net/eekxzq1u/

當u點擊選項卡,它彈出一個灰色的框,當u點擊選項卡再次,它順利關閉。 但是當你標籤出來時,標籤將不再平穩工作

+3

我們也非常渴望看到您的代碼。因爲想象對我們來說很難。 – 2014-11-05 09:24:12

+0

@shoaib chikate done,sorry – Devon 2014-11-05 09:26:10

+0

您要求我們調試您沒有給我們的自定義函數'clickToggle'。 – 2014-11-05 09:32:50

回答

0

你可以通過實現一個簡單的狀態機方法來避免使用插件。 Demo。你需要的功能

  1. 陣要在點擊調用states
  2. 變量存儲當前狀態currentState
  3. 和處理程序調用上的點擊狀態功能run

代碼:

var states = [function() { // click button 1st toggle 
     $(".log").html("click Toggle1, show tab panel, isToggle = true"); 
     $("#toggle_content").animate({width:'toggle'},350); 
     $(".container").addClass("overlay-disable"); 
     currentState = 1; //change state 

     $(".container").click(function() { 
      $(".container").unbind("click").removeClass("overlay-disable"); 
      $(".log").html("panel hide success, isToggle = false"); 
      $("#toggle_content").hide(); 
      currentState = 0; //change state 
     }); 
    }, 
     function() { 
     $(".container").unbind("click").removeClass("overlay-disable"); 
     $(".log").html("click Toggle2, hide tab panel"); 
     $("#toggle_content").animate({width:'toggle'},350); 
      currentState = 0; //change state 

    }], 
    currentState = 0, 
    run = function() { 
     return states[currentState].apply(this, arguments);   
    }; 

$("#toggle").click(run); 
+0

謝謝,正是我需要的。但是,你能向我解釋,因爲它對我有好處嗎?我不明白run = function()返回狀態[currentState] .apply(this,arguments); }; – Devon 2014-11-05 11:08:26

+0

它只是一個調用另一個函數的函數。哪部分代碼不清楚? – 2014-11-05 11:11:02

+0

只是這一行返回狀態[currentState] .apply(this,arguments); ,你看我真的不知道退貨是如何工作的。我會在網上搜索它。謝謝@yury tarabanko – Devon 2014-11-05 11:18:27