在JavaScript / jQuery中更改切换的状态

时间:2012-01-29 14:34:38

标签: javascript html toggle jquery

是否可以更改切换功能的状态?像:

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

  1. 我点击了myDiv元素,函数1执行
  2. 我再次点击,功能2
  3. 我再次点击,功能1 BUT
  4. 更改状态
  5. 再次执行功能1 等
  6. 但我需要能够从切换功能外部改变状态。

2 个答案:

答案 0 :(得分:0)

切换功能适用于简单的用例。从外部改变状态不再是“简单”了。

你不能轻易/安全地(它是内部的,因此它可能会在次要版本中发生变化)轻松访问切换功能的状态变量,因为它存储在元素的内部数据集中。

如果你真的想这样做,你可以试试这个代码:

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

func是您传递给.toggle()的函数,因此您需要将此函数保存在变量中。这是一个最小的例子:http://jsfiddle.net/xqgrP/

但是,由于函数内部有一个var guid = fn.guid || jQuery.guid++语句,我不知何故认为开发人员实际上意味着使用guid而不是func.guid用于_data键 - 这种情况下,一个小的更新很可能会破坏事情。在修复之后,您必须遍历数据集以检索正确的密钥,因为无法从外部访问guid。

答案 1 :(得分: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);
     });
 });