2012-01-29 72 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