猿问

为什么setInterval只执行一次?

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>



富国沪深
浏览 84回答 1
1回答

梵蒂冈之花

您的函数运行正确,问题出在函数代码本身,而不是在setInterval.这样做:string = string.replace(/_/, char);你总是试图更换_角色。从第二次调用函数时起,该字符将不再存在,因为它被第一次调用所替换。如果您希望最后一个字符不断变化,您有多种选择:string = string.substrstring.replace(/.$/, char);// orstring = string.substrstring.slice(0, -1) + char;// or even justbuttons[i].textContent = 'help' + char;正则表达式.$匹配字符串中最后一个位置的任何字符($匹配字符串的末尾),但它可能是最慢的选项。工作片段:const buttons = document.getElementsByTagName('button');setInterval(charChange, 1000);function charChange(){&nbsp; &nbsp; let string;&nbsp; &nbsp; let chars = ['#', '!', '@', '$', '%', '&', '+', '?'];&nbsp; &nbsp; for(i = 0; i < buttons.length; i++){&nbsp; &nbsp; &nbsp; &nbsp; let char = chars[Math.floor(Math.random() * 7)];&nbsp; &nbsp; &nbsp; &nbsp; buttons[i].textContent = 'help' + char;&nbsp; &nbsp; }}<button id = 'title'>help_</button>
随时随地看视频慕课网APP

相关分类

Html5
我要回答