Изменение состояния переключателя в JavaScript / jQuery - PullRequest
0 голосов
/ 29 января 2012

Можно ли изменить состояние функции переключения?Например:

myDiv.toggle ... функция 1, функция 2

  1. Я нажимаю на элемент myDiv, функция 1 выполняет
  2. Я нажимаю снова, функция2
  3. Я нажимаю снова, функция 1, НО
  4. Изменим состояние
  5. , снова функцию 1 и т. Д.

Но мне нужно иметь возможностьизменить состояние снаружи функции переключения.

Ответы [ 2 ]

0 голосов
/ 29 января 2012

Вот объект 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 голосов
/ 29 января 2012

Функция переключения предназначена для простых случаев использования.Внешнее изменение состояния больше не является «простым».

Вы не можете легко / безопасно (это внутреннее, так что оно может измениться в младших версиях) легкий доступ к переменной состояния функции переключения, поскольку она хранится во внутреннем наборе данныхэлемент.

Если вы действительно хотите это сделать, попробуйте этот код, хотя:

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

func - это функция, которую вы передали .toggle(), поэтому вам нужносохранить эту функцию в переменной.Вот минимальный пример: http://jsfiddle.net/xqgrP/

Однако, поскольку внутри функции есть оператор var guid = fn.guid || jQuery.guid++, я почему-то думаю, что разработчики на самом деле хотели использовать guid вместо func.guid для _dataключ - в этом случае незначительное обновление очень вероятно сломает вещи.И после исправления вам придется перебирать набор данных, чтобы получить правильный ключ, поскольку нет никакого способа получить доступ к руководству извне.

...