javascript - 我无法让 setInterval() 在 Javascript 中工作

标签 javascript jquery setinterval

我有一个算法可以生成给定单词的排列。我正在尝试使用 setInterval() 生成下一个排列,但该函数仅运行一次!我不明白为什么。我没有收到任何错误消息。 这是我的代码

var splitted;
var t;
 $(document).ready(function() {
$('#SubmitBtn').click(function() {
    //change Start to Stop and change button id
    $('#SubmitBtn').attr('id','StopBtn').attr('value','Stop');
    //and add click event to it
    $('#StopBtn').click(function() {
        clearInterval(t);
        $('#StopBtn').attr('value','Submit');
        $('StopBtn').attr('id','SubmitBtn');
    });
    if ($('#AnagramTxtArea').val().length>0)
            $('#AnagramTxtArea').text('');
    var inputTxt = $('#anagram').val();
    splitted = inputTxt.split("");
    splitted.sort(); //first sort the array in order to generate permutations
    $('#AnagramTxtArea').append(splitted.join("") + " ");
    t= setInterval(GeneratePermutation(),10);
});
 });

 var AnagramObj = new Anagram();
 function GeneratePermutation() {
        splitted = AnagramObj.NextPermutation(splitted);
        if (splitted!=null)
            $('#AnagramTxtArea').append(splitted.join("") + " ");       
        else  
            $('#StopBtn').click();

    }

和 HTML:

<div id="content">
<input id="anagram" type="text" placeholder="Insert your text here" maxlength="80"/>                    <br />
<input id="SubmitBtn" type="submit" value="submit" />
<br />
<textarea id="AnagramTxtArea" readonly="readonly"></textarea>

</div> 

编辑: 然而,另一个问题:

当调用 $('#StopBtn').click() 时,代码在单击事件函数存在后继续执行。所以我陷入了无限循环。

最佳答案

您需要将函数对象本身传递给 setInterval(),而不是函数调用的结果:

t = setInterval(GeneratePermutation,10);
                                // ^ No parentheses

编辑:关于第二个问题,您可以做的是检查间隔是否正在运行。如果是,则取消它:

var splitted;
var t;
$(document).ready(function() {
$('#SubmitBtn').click(function() {
    if (t !== undefined) { //interval is already running
        clearInterval(t);
        t = undefined;
        $('#SubmitBtn').attr('value','Submit');
    } else {
        //change Start to Stop
        $('#SubmitBtn').attr('value','Stop');
        if ($('#AnagramTxtArea').val().length>0)
                $('#AnagramTxtArea').text('');
        var inputTxt = $('#anagram').val();
        splitted = inputTxt.split("");
        splitted.sort(); //first sort the array in order to generate permutations
        $('#AnagramTxtArea').append(splitted.join("") + " ");
        t = setInterval(GeneratePermutation,10);
    }
});
});

关于javascript - 我无法让 setInterval() 在 Javascript 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216558/

相关文章:

java - 如何在Struts中使用其键值获取json对象?

jquery - 悬停时清除间隔

javascript - 在 bootstrap 中垂直定位 .tooltip-inner

javascript - 随机化并在页面加载时显示给定数量的元素

javascript - 收到名为“无法在尚未安装的组件上调用 setState”的警告

javascript - `setInterval` 明显的无限循环

javascript - 在 JavaScript 中存储执行状态?可以稍后恢复吗?

javascript - html5 从 Canvas 中删除

javascript - 允许 JavaScript 闭包从父级作用域继承变量

javascript - 如何使用 TypeScript 静态注入(inject)器模式注入(inject) `$rootScope`?