我有一个功能,每次从下拉列表中选择一个复选框div时都会调用它。以下是我的功能:
function arming(){
$('#armText').change(function(){
if ($('#armCB_1').is(':checked')){
$.post('/request', {key_pressed:"arming_status"}).done(function(reply){
$('#armStatus').empty().append("<h3>The Arming Status is " + reply).show();
});
}
else{
$('#armStatus').hide();
}
});
}
我的问题是,如何在一段时间内更新“armStatus”并且只在未选中复选框时停止更新?此外,我希望程序的其余部分继续运行。是否可以使用while(1)作为无限循环?
答案 0 :(得分:3)
您可以创建一个自我循环的函数,直到满足条件:
function loopFunction() {
var $ = jQuery,
if (!$('#armCB_1').is(':checked')){
//do something
setTimeout(function() {
loopFunction();
}, 500);
}
}
答案 1 :(得分:2)
var $arm = $('#armStatus'),
$checkbox = $('#armCB_1');
$checkbox.change(function() {
$arm.toggle(this.checked);
})
setInterval(function(){
if ($checkbox.is(':checked')) { // if ($arm.is(':visible')) {
$.post('/request', {key_pressed:"arming_status"}).done(function(reply){
$arn.html("<h3>The Arming Status is " + reply).show();
});
}
}, 1000);
答案 2 :(得分:1)
您有两种选择。 setInterval和setTimeout。 使用setInterval,您可以使用clearInterval结束循环。
e.g。
setInterval(function(){}, 200)
函数中的代码将在每200ms后运行。以下代码符合您的要求
function arming() {
var loop = setInterval(function () {
$.post('/request', {
key_pressed: "arming_status"
}).done(function (reply) {
$('#armStatus').empty().append("<h3>The Arming Status is " + reply).show();
});
}, 200)
$('#armText').change(function () {
if ($('#armCB_1').is(':checked')) {
clearInterval(loop);
} else {
$('#armStatus').hide();
}
});
}
答案 3 :(得分:1)
您可以使用window.setTimeout(action,n)。更好的解决方案可以在这里找到[链接] aktuell.de.selfhtml.org/artikel/javascript/timer/#timer(文本德语,只看源头)。你只需要在自己的
上禁用/启用这个Timer答案 4 :(得分:0)
所以我的程序的当前解决方案是:
function arming() {
var loop = setInterval(function () {
$.post('/request', {
key_pressed: "arming_status"
}).done(function (reply) {
$('#armStatus').empty().append("<h3>The Arming Status is " + reply).show();
});
}, 200)
$('#armText').change(function () {
if (!$('#armCB_1').is(':checked')) { //if it is unchecked
clearInterval(loop);
}
});
}
但是如果我选中并取消选中复选框,它就不会再这样做了。
更新 - 更好的解决方案:
function arming() {
var $arm = $('#armStatus'),
$checkbox = $('#armCB_1');
$checkbox.change(function() {
$arm.toggle(this.checked);
})
setInterval(function(){
if ($checkbox.is(':checked')) {
$.post('/request', {key_pressed: "arming_status"}).done(function (reply) {
$('#armStatus').empty().append("<h3>The Arming Status is " + reply).show();
});
}
else {
$arm.hide();
}
}, 2000);
}