복붙노트

[JQUERY] jQuery의 .toggle () 메소드 대체 지원의 EVENTDATA인가?

JQUERY

jQuery의 .toggle () 메소드 대체 지원의 EVENTDATA인가?

해결법


  1. 1.오히려 (당신이 링크의 전체 무리를 추적하기를 원한다면 두통이 될 수 있음) 추가 변수를 도입보다 난 그냥 당신이 jQuery의 데이터 스토리지 유틸리티를 사용하는 것이 좋을 것 ... 그것을 할 수있는 합리적인 방법처럼 보인다 . 그래서 예의 기반 :

    오히려 (당신이 링크의 전체 무리를 추적하기를 원한다면 두통이 될 수 있음) 추가 변수를 도입보다 난 그냥 당신이 jQuery의 데이터 스토리지 유틸리티를 사용하는 것이 좋을 것 ... 그것을 할 수있는 합리적인 방법처럼 보인다 . 그래서 예의 기반 :

    $('a').click(function() {
      var clicks = $(this).data('clicks');
      if (clicks) {
        alert('odd number of clicks');
      } else {
        alert('even number of clicks');
      }
      $(this).data("clicks", !clicks);
    });
    

  2. 2.여기에 구현은 대안 (.toggle 할 수있는 플러그인)가 1.9+ jQuery를 제거되어, 특히 이후이다.

    여기에 구현은 대안 (.toggle 할 수있는 플러그인)가 1.9+ jQuery를 제거되어, 특히 이후이다.

    사용하는 방법:

    이 방법에 대한 서명은 다음과 같습니다

    .cycle( functions [, callback] [, eventType])
    

    사용의 예는 다음과 같습니다

    $('a').cycle([
        function() {
          alert('odd number of clicks');
        }, function() {
          alert('even number of clicks');
        }
    ]);
    

    여기 데모를 포함 시켰습니다.

    플러그인 코드 :

    (function ($) {
        if (!Array.prototype.reduce) {
            Array.prototype.reduce = function reduce(accumulator) {
                if (this === null || this === undefined) throw new TypeError("Object is null or undefined");
                var i = 0,
                    l = this.length >> 0,
                    curr;
    
                if (typeof accumulator !== "function") // ES5 : "If IsCallable(callbackfn) is false, throw a TypeError exception."
                throw new TypeError("First argument is not callable");
    
                if (arguments.length < 2) {
                    if (l === 0) throw new TypeError("Array length is 0 and no second argument");
                    curr = this[0];
                    i = 1; // start accumulating at the second element
                } else curr = arguments[1];
    
                while (i < l) {
                    if (i in this) curr = accumulator.call(undefined, curr, this[i], i, this);
                    ++i;
                }
    
                return curr;
            };
        }
        $.fn.cycle = function () {
            var args = Array.prototype.slice.call(arguments).reduce(function (p, c, i, a) {
                if (i == 0) {
                    p.functions = c;
                } else if (typeof c == "function") {
                    p.callback = c;
                } else if (typeof c == "string") {
                    p.events = c;
                }
                return p;
            }, {});
            args.events = args.events || "click";
            console.log(args);
            if (args.functions) {
                var currIndex = 0;
    
                function toggler(e) {
                    e.preventDefault();
                    var evaluation = args.functions[(currIndex++) % args.functions.length].apply(this);
                    if (args.callback) {
                        callback(currIndex, evaluation);
                    }
                    return evaluation;
                }
                return this.on(args.events, toggler);
            } else {
                //throw "Improper arguments to method \"alternate\"; no array provided";
            }
        };
    })(jQuery);
    
  3. from https://stackoverflow.com/questions/2459153/alternative-to-jquerys-toggle-method-that-supports-eventdata by cc-by-sa and MIT license