我是否需要使用JQuery删除和替换事件处理程序来交换它们?

时间:2015-09-02 01:38:51

标签: javascript jquery

  1. 我希望事件clicktouchstart触发一个功能。
  2. 当然,使用JQuery很简单。 $('#id').on('click touchstart', function{...});

    1. 但是一旦触发了该事件,我希望同样的处理程序在触发事件时执行其他操作,

    2. 然后,我想回到原来的处理功能。

    3. 似乎必须有一种比使用$('#id').off('click touchstart');然后重新应用处理程序更简洁的方法。

      我该怎么做?

2 个答案:

答案 0 :(得分:0)

我这样做的方法是为处理程序函数创建一些函数,以便根据某些标志进行调用。 Sudo代码将是这样的:

angular.module('someApp')
    .directive('asDate', function () {
    return {
        require: '^ngModel',
        restrict: 'A',
        link: function (scope, element, attrs, ctrl) {
            ctrl.$formatters.splice(0, ctrl.$formatters.length);
            ctrl.$parsers.splice(0, ctrl.$parsers.length);
            ctrl.$formatters.push(function (modelValue) {
                if (!modelValue) {
                    return;
                }
                return new Date(modelValue);
            });
            ctrl.$parsers.push(function (modelValue) {
                return modelValue;
            });
        }
    };
});

然后您需要做的就是更改变量function beginning_action() { ... } function middle() { ... } var beginning_state = true; $('#id').on('click touchstart', function{ if(beginning_state) { beginning_action(); } else { middle(); } }); 以更改调用的函数。当然,你会给他们更好的名字,描述他们做什么,而不是他们这样做。

此外,如果您希望处理程序调用两个以上的函数,您可以将beginning_state变量从布尔值更改为int并检查它的值以确定要调用的函数。

祝你好运!

答案 1 :(得分:0)

您可以在javascript代码中的某个构造中创建一个计数器变量,以便您决定如何处理事件。

 $(function() {

       var trackClicks = (function() {

         var clicks = true;

         var getClicks = function() {
           return clicks;
         };

         var eventClick = function() {
           clicks = !clicks;
         };

         return {
           getClicks: getClicks,
           eventClicks: eventClicks
         }

       })();


       $('#id').on('click touchstart', function {
         if (trackClicks.getClicks()) {
           handler1();
         } else {
           handler2();
         }
         trackClicks.eventClick();

       });

       function handler1() { //firsthandler};
         function handler2() { //secondhandler};

         });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>