2012-01-29 52 views
0

是否可以更改切換功能的狀態?像:更改JavaScript/jQuery中切換的狀態

myDiv.toggle ...功能1,功能2

  1. 我的myDiv元素上點擊,功能1執行
  2. 我再次點擊,功能2
  3. 我再次點擊,功能1 BUT
  4. 更改狀態
  5. 功能1再次 等

但我需要能夠從切換功能外部更改狀態。

+0

你有沒有試過一些代碼? – Mike 2012-01-29 14:36:09

+0

什麼?你能給出一個僞代碼的例子來說明你想達到什麼,或者更好的解釋嗎?當涉及到步驟4和步驟5時,您的問題有點令人困惑。 – Bojangles 2012-01-29 14:36:43

回答

0

下面是一個使用閉合跟蹤它的狀態和觸發JavaScript對象:

var TOGGLER = function() { 
     var _state = true; 
     var _msg = "function1"; 

     var function1 = function() { 
      _msg = "function1"; 
     } 

     var function2 = function() { 
      _msg = "function2"; 
     } 

     return { 
     toggle: (function() { 
      _state = !_state; 

      if (_state) { 
       function1();  
      } else { 
       function2(); 
      } 

      return _msg; 
     }) 
     } 
    }(); 

這裏是一個的jsfiddle展示瞭如何使用它基於與下面的jQuery來切換:http://jsfiddle.net/yjPKH/5/

$(document).ready(function() { 
    $("#search").click(function() { 
     var message = TOGGLER.toggle(); 
     $("#state").text(message); 
    }); 
}); 
+0

這不提供重置狀態的方法。 – ThiefMaster 2012-01-29 15:24:26

+0

謝謝,它完美的工作,我的最終代碼:http://jsfiddle.net/yjPKH/11/ – 2012-01-29 15:26:09

+0

@ThiefMaster我剛剛定義了_state變量的TOGGLER函數,現在我可以從其他函數改變它,如果這是你的意思是。 – 2012-01-29 15:27:21

0

切換功能適用於簡單用例。外部改變狀態不再「簡單」了。

因爲它存儲在元素的內部數據集中,所以不能輕鬆/安全地(它是內部的,因此它可能會在較小版本中更改)輕鬆訪問toggle功能的狀態變量。

如果你真的想這樣做,你可以嘗試雖然這段代碼:

$._data(ELEMENT, "lastToggle" + func.guid, 0); 

func是你傳遞給.toggle()的功能,所以你需要保存這個函數中的一個變量。這裏有一個小例子:http://jsfiddle.net/xqgrP/

然而,由於在函數內部有一個var guid = fn.guid || jQuery.guid++聲明,不知何故,我覺得開發者實際上意味着使用​​而不是func.guid_data關鍵 - 在這種情況下,一個小的更新是非常有可能打破事情。修復之後,您必須遍歷數據集才能檢索正確的密鑰,因爲無法從外部訪問該GUID。

+0

我明白了。所以我認爲通過一些變量或帶id的空白div進行自定義切換比較簡單。 – 2012-01-29 14:49:36

+0

http://jsfiddle.net/XWnZq/1/應該可以工作,但我不知道爲什麼id不。 – 2012-01-29 14:58:01

+0

說實話,那看起來就像缺乏基本的js知識......當你有jQuery可用時,爲什麼你會用'document.getElementById'這樣的東西?!實際上,你將它與jQuery函數混合在一起,所以你的代碼**根本無法工作! – ThiefMaster 2012-01-29 15:18:14