click
和touchstart
触发一个功能。 当然,使用JQuery很简单。 $('#id').on('click touchstart', function{...});
但是一旦触发了该事件,我希望同样的处理程序在触发事件时执行其他操作,
然后,我想回到原来的处理功能。
似乎必须有一种比使用$('#id').off('click touchstart');
然后重新应用处理程序更简洁的方法。
我该怎么做?
答案 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>