在执行时在Javascript中重置变量?

时间:2017-07-22 03:14:14

标签: javascript jquery html

我使用此功能在15秒后自动点击按钮。问题是用户在运行选项后不会离开页面,并且可能会在同一页面上重新运行,但计时器会继续运行。事实上,即使我自己动手,计时器也会继续。

<script type="text/javascript">
time = 15;
interval = setInterval(function() {
  time--;
    document.getElementById('Label1').innerHTML = "You must choose in " + time + " seconds"
    if (time == 0) {
        // stop timer
        clearInterval(interval);
        // click
        document.getElementById('thebutton').click();       
    }
}, 1000)

</script>

所以这个脚本应该运行计时器&#34;按&#34; &#34;按钮&#34;在十五秒内然后计时器应停止计数并重置直到再次运行。如果在15秒之前手动按下该按钮,它仍应重置。

<input type='submit' id='thebutton' value='Done'></input>

希望这很清楚。我还是新手并且在学习。

5 个答案:

答案 0 :(得分:1)

设置基准时间,然后将其重置为该基准时间。

<script type="text/javascript">
time = 15;
baseTime = 15;
interval = setInterval(function() {
  time--;
    document.getElementById('Label1').innerHTML = "You must choose in " + time + " seconds"
    if (time == 0) {
        // stop timer
        clearInterval(interval);
        // click
        document.getElementById('thebutton').click(); 
        time = baseTime;
        return false;


    }
}, 1000)

</script>

答案 1 :(得分:1)

我看了一下代码,我认为你应该关注的最重要的事情是按钮没有&#34; onclick&#34;功能。 这意味着单击该按钮不会执行任何操作,因为您没有在其中放置一个单击它时执行操作的功能。

我写了一些希望有帮助的代码:

List<int> unsorted = new List<int> { 9, 8, 7, 6 };
public Form1()
{
    InitializeComponent();

    foreach (int x in unsorted)
    {
        textBox2.text = textBox2.text + x.ToString() + "";
    }
 }

 private void button1_Click(object sender, EventArgs e)
 {
     List<int> result = new List<int>(quicksort(unsorted));
     showsort(result)
 }

在你的html中是这样的:

let time = 15;
const label = document.getElementById("Label1");
const button = document.getElementById("thebutton");

const getText = () => `You must choose in ${time} seconds`;

const interval = setInterval(() => {
    time--;
    label.innerHTML = getText();
    if (time === 0) {
    // stop timer
    clearInterval(interval);
    // click
    button.click();
  }
}, 1000);

const stopTime = () => {
  clearInterval(interval);
  time = 15;
  label.innerHTML = getText();
};

最后我制作了一个小视频,我在其中浏览代码,它也很有用:https://youtu.be/ZYS9AcxO3d4

祝你有美好的一天!

答案 2 :(得分:0)

如果你只想在15秒后点击一次按钮,那么你应该使用setTimeout()函数而不是setInterval()。

然后,如果您不希望在用户单击按钮时发生自动点击,则需要向调用clearTimeout()的按钮添加onClick处理程序。

答案 3 :(得分:0)

我假设您希望标签更新为秒数倒计时?而且还不清楚计时器是如何启动的。检查以下代码,看看它是否符合您的预期。

&#13;
&#13;
var time, interval;

function stopTimer() {
  if (interval) {
    clearInterval(interval);
    interval = null;
  }
  
  time = 15;
}

function timerAction() {
  $('#lblStatus').text("You must choose in " + time + " seconds");

  if (time-- <= 0) {
    stopTimer();
    console.log("done!");
    $("#btnStop").click();
  }
}

function startTimer() {
  stopTimer();
  timerAction();
  interval = setInterval(timerAction, 1000);
}

$("#btnStart").click(function() {
  startTimer();
});

$("#btnStop").click(function() {
  stopTimer();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<span id=lblStatus></span>
<button id='btnStart'>Reset / Start</button>
<button id='btnStop'>Stop</button>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

如果只想运行一次,可以使用setTimeout函数

setTimeout(your code, 15000);