我不能让setInterval()在Javascript中工作 [英] I can't get setInterval() to work in Javascript

查看:81
本文介绍了我不能让setInterval()在Javascript中工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

i have an algorithm that generates permutations of a given word. I'm trying to use setInterval() to generate the next permutation but the function runs only once! I can't figure out why. I don't get any error messages. Here is my code

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> 

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

Yet, another problem:

调用$('#StopBtn')时,click()代码在现有click事件函数后继续执行。所以我处在一个无限循环中。

When calling $('#StopBtn').click() code continues to execute after existing the click event function. So i'm in an infinite loop.

推荐答案

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

You need to pass the function object itself to setInterval(), not the result of a call to the function:

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

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

On your second question, what you can do is check whether the interval is running. If it is, then cancel it:

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);
    }
});
});

这篇关于我不能让setInterval()在Javascript中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆