在下面的代码中:
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
<button type="button" class="btn btn-danger" id="TxChg">Proceed</button>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script>
idcate = 0;
function checkbuff() {
while ((idcate == 0)) {
mis = new Date().getSeconds() % 30;
if (mis == 2) {
idcate = 1;
}
}
}
$('#TxChg').click(function() {
document.getElementById("TxChg").innerHTML = "<i class='fa fa-refresh fa-spin'></i>Processing...";
checkbuff();
});
</script>
我想让“ Txchg”按钮将其文本更改为“正在处理...” checkbuff()功能运行。
我不知道为什么这段代码总是先运行checkbuff()函数,然后我会看到按钮更改了文本?
答案 0 :(得分:1)
由于正在等待特定的秒数发生,因此您应该在第二秒执行逻辑循环,而不是让垃圾邮件循环系统。您还可以设置首次调用setTimeout,使浏览器有机会重画。
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
<button type="button" class="btn btn-danger" id="TxChg">Proceed</button>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script>
idcate = 0;
function checkbuff() {
if (!idcate) {
var mis = new Date().getSeconds() % 30;
console.log(mis);
if (mis === 2) {
idcate = 1;
} else {
setTimeout(checkbuff, 1000);
}
}
}
$('#TxChg').click(function() {
document.getElementById("TxChg").innerHTML = "<i class='fa fa-refresh fa-spin'></i>Processing...";
setTimeout(checkbuff, 0);
});
</script>