如何创建一个javascript侦听器函数,该函数将在条件为true时执行操作
How do I create a javascript listener function that will perform an action when a condition is true?
我使用的是一个第三方javascript,它给了我很多侦听器的需求。例如,当加载了某个div时,我想对它做点什么。它也会随着对象的变化而改变对象的样式,所以我需要注意它是否具有特定的样式。我构建了在id或类存在时执行的函数。这是当前的ID函数。正如您所看到的,它使用jQuery。
function whenLoaded(element_id, action) {
if ($(element_id)) {
action();
}
else {
setTimeout("whenLoaded('"+element_ids+"',"+action+", '"+stop_on+"')", 500);
}
}
我真的需要一些可以给出多种条件的东西。例如:
whenTrue(
($('popup') && $('popup').style.width == '500px'),
$('popup').style.width = '0'
);
我希望它递归地检查条件(第一个参数)。当这些条件成立时,执行操作。
我已经能够使用eval()实现这一点,但有人警告我不要使用它,我不记得为什么了。话虽如此,我还是想用另一种方式来实现这一目标。
eval()解决方案:
whenTrue(
"($('popup') && $('popup').style.width == '500px')",
"$('popup').style.width = '0'"
);
function whenTrue(condition, action) {
if (eval(condition)) {
eval(action);
}
else {
setTimeout("whenTrue('"+condition+"','"+action+"')", 500);
}
}
function conditionListener(callback){
if(typeof callback !== 'function') return;
var interval, callback = callback;
interval = setInterval(function() {
if(true /* some condition */){
callback();
clearInterval(interval);
}
}, 500);
}
var listener = new conditionListener(function() {
/* ... do work ... */
});
http://jsfiddle.net/M26XS/
我写过一次这个函数,看起来它基本上可以做你想要的:
function pollUntilTrue(conditionFunc, afterTrueFunc, timeout) {
var __xinterval = setInterval(function() {
var res = conditionFunc();
if (res === true) {
clearInterval(__xinterval);
afterTrueFunc();
}
}, timeout);
}
你可以将它与你的代码一起使用,如下所示:
pollUntilTrue(function() {
return ($('popup') && $('popup').style.width == '500px');
},
function() {
$('popup').style.width = '0';
}, 500);
调整超时以满足您的需求
为什么不接受一个条件和一个操作?那会让事情变得简单得多。
function whenTrue(condition, action) {
if (condition) {
action();
}
else {
setTimeout("whenTrue('"+condition+"',"+action+", '"+stop_on+"')", 500);
}
}
然后你可以在调用函数时提供条件,它看起来像这样:
whenTrue(($('popup') && $('popup').style.width == '500px') &&
$('popup').style.width === '0', someAction);
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery未定义函数正在停止其他操作
- 是否可以像字符串一样/操作/函数
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 在成功时操作 AJAX 函数
- toogleClass函数来切换元素类并在事件期间执行某些操作
- 使用jQuery来foreach iframe-src,并通过函数获取ID和操作
- 如何在函数外返回此操作的结果
- 在操作完成时执行函数
- 表单操作值未从attr()函数中获取
- 浏览器化 - 将操作绑定到函数
- 在执行所有回调函数后执行操作
- 有没有办法从 javascript 函数调用控制器操作
- 如何通过查找函数及其 ID 访问和操作 HTML 表
- 函数将信息返回到控制台日志,但实际上并没有执行应有的操作
- 在JavaScript中的无操作(空)函数中不添加换行符的选项(IntelliJ Web/PHP风暴)
- "撤消”;Javascript中的DOM操作函数
- Ember.js-定义一个全局函数,该函数可以向操作返回值
- 使用JavaScript函数操作HTML
- Javascript在函数操作后重新加载