javascript - 为什么setInterval只执行一次?

标签 javascript html

setInterval 仅执行一次。我还尝试使用 setTimeout 并将其放置在函数内以引起循环,但这给出了相同的结果。我正在使用括号,如果这有影响的话,它是实时预览。

const buttons = document.getElementsByTagName('button');

setInterval(charChange, 1000);

function charChange(){
    let string;
    let chars = ['#', '!', '@', '$', '%', '&', '+', '?'];
    for(i = 0; i < buttons.length; i++){
        string = buttons[i].textContent;
        let char = chars[Math.floor(Math.random() * 7)];
        string = string.replace(/_/, char);
        buttons[i].textContent = string;
    }
}
<button id = 'title'>help_</button>

最佳答案

您的函数运行正确,问题出在函数代码本身,而不是在 setInterval 中。

这样做:

string = string.replace(/_/, char);

您总是尝试替换 _ 字符。从第二次调用您的函数开始,该字符将不再存在,因为它被第一次调用替换。

如果您希望最后一个字符不断变化,您有多种选择:

string = string.substrstring.replace(/.$/, char);
// or
string = string.substrstring.slice(0, -1) + char;
// or even just
buttons[i].textContent = 'help' + char;

正则表达式 .$ 匹配字符串中最后位置的任何字符($ 匹配字符串的末尾),但它可能是最慢的选项。

<小时/>

工作片段:

const buttons = document.getElementsByTagName('button');

setInterval(charChange, 1000);

function charChange(){
    let string;
    let chars = ['#', '!', '@', '$', '%', '&', '+', '?'];
    for(i = 0; i < buttons.length; i++){
        let char = chars[Math.floor(Math.random() * 7)];
        buttons[i].textContent = 'help' + char;
    }
}
<button id = 'title'>help_</button>

关于javascript - 为什么setInterval只执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60767340/

相关文章:

javascript - 'define' is not defined error on RequireJS & Webapp Yo generator

javascript - meteor 电子邮件 ETIMEOUT 错误

javascript - Google Calendar API - 如何使用 JavaScript 创建快速添加事件?

JavaScript 类函数

javascript - 如何使用 javascript 获取像素中左/右/上/下属性的值?

java - 在 JEditorPane 中显示可点击的 HTML 链接

javascript - 合并两个具有相同属性的函数

javascript - 当我运行包含他的 JS 时,一个元素会跳起来

javascript - 将数组转换为 Json

javascript - 通过 JavaScript 使用 Canvas,如何在单击按钮后更改圆的半径?