为了账号安全,请及时绑定邮箱和手机立即绑定

为什么setInterval只执行一次?

为什么setInterval只执行一次?

富国沪深 2023-09-25 17:20:40
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>
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

您的函数运行正确,问题出在函数代码本身,而不是在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>


查看完整回答
反对 回复 2023-09-25
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信