JavaScript只允许在某些条件为真时执行各种函数
我有一个附加到各种元素的事件处理程序列表,但是当某个条件为真时,我想禁用其中的一些。该条件(即布尔值)会动态变化,并且在变化时不可预测。以下是我目前的工作JavaScript只允许在某些条件为真时执行各种函数,javascript,jquery,Javascript,Jquery,我有一个附加到各种元素的事件处理程序列表,但是当某个条件为真时,我想禁用其中的一些。该条件(即布尔值)会动态变化,并且在变化时不可预测。以下是我目前的工作 function foo () { if (someCondition) { return; } // foo does something } function bar () { if (someCondition) { return; } // bar
function foo () {
if (someCondition) {
return;
}
// foo does something
}
function bar () {
if (someCondition) {
return;
}
// bar does something
}
...etc
这是可以的,但是在每个函数中都有if块确实是多余的。有没有更简洁的方法来处理这个问题?我想知道是否可以将两个事件处理程序附加到一个元素,并且在另一个元素返回true时仅执行一个事件处理程序。您可以编写一个函数,将函数转换为仅在条件为true时运行的函数:
function conditionalize( fn ) {
return function() {
if (someCondition) return;
return fn.apply(this, arguments);
};
}
然后:
您可以编写一个函数,将函数转换为仅在条件为true时运行的函数:
function conditionalize( fn ) {
return function() {
if (someCondition) return;
return fn.apply(this, arguments);
};
}
然后:
您可以使用委托方法,如jQuery事件处理方法,请尝试以下方法:
var callbacks = [foo, bar];
function delegate() { // this is the only event handler
var i, len;
for(i=0, len = callbacks.length; i < len; i++) {
if(callbacks[i].apply(this, arguments)){
continue; // return value of this callback is true then continue
} else {
break; // ignore other callbacks
}
}
}
function foo () {
// foo does something
}
function bar () {
// bar does something
}
var回调=[foo,bar];
函数委托(){//这是唯一的事件处理程序
变量i,len;
for(i=0,len=callbacks.length;i
您可以使用委托方法,如jQuery事件处理方法,请尝试以下方法:
var callbacks = [foo, bar];
function delegate() { // this is the only event handler
var i, len;
for(i=0, len = callbacks.length; i < len; i++) {
if(callbacks[i].apply(this, arguments)){
continue; // return value of this callback is true then continue
} else {
break; // ignore other callbacks
}
}
}
function foo () {
// foo does something
}
function bar () {
// bar does something
}
var回调=[foo,bar];
函数委托(){//这是唯一的事件处理程序
变量i,len;
for(i=0,len=callbacks.length;i
正如前面提到的foo
和bar
是事件处理程序,在事件处理程序上下文中,此
指向目标元素而非全局对象我删除了我的注释,我明白为什么了!Thx尖头!你应该使用apply
函数而不是call
@ABFORCE哇,我读了你的评论,心想,“哎呀,这个人疯了,因为我确实使用了apply
”,然后我看了看:)谢谢!正如前面提到的foo
和bar
是事件处理程序,在事件处理程序上下文中,这个指向的是目标元素而不是全局对象我删除了我的注释,我明白为什么了!Thx尖头!你应该使用apply
函数而不是call
@ABFORCE哇,我读了你的评论,心想,“哎呀,这个人疯了,因为我确实使用了apply
”,然后我看了看:)谢谢!在我看来,你的方法很好。这并不需要太多的代码,对于新的读者来说是很清楚的,并且它允许在每个函数的基础上改变条件。你甚至可以把它压缩成一行而不影响可读性。对,我同意这样做可能没有错。如果我能避免多次编写相同的代码行,我个人会觉得更有条理。我相信在某些情况下,这是必要的,但我会首先寻找一种更简洁的方法。集中决策是个好主意。如果您的应用程序发展到决策变得更加复杂,那么您必须在很多地方对其进行更改。我认为,您的方法是很好的。这并不需要太多的代码,对于新的读者来说是很清楚的,并且它允许在每个函数的基础上改变条件。你甚至可以把它压缩成一行而不影响可读性。对,我同意这样做可能没有错。如果我能避免多次编写相同的代码行,我个人会觉得更有条理。我相信在某些情况下,这是必要的,但我会首先寻找一种更简洁的方法。集中决策是个好主意。如果应用程序的发展使得决策变得更加复杂,那么您必须在很多地方对其进行更改。