设置间隔功能在 jsp 中不起作用?

set Interval function is not working in jsp?

setInterval 函数在我的 jsp 页面中不起作用,下面是我的代码:-

<script>
    $(document).ready(function(){

        $('form[name="lgform"]').submit(function(evnt){
            evnt.preventDefault();

        try{
            mapPlotVar.clearInterval();
            }
            catch(e)
            {
            }
            mapPlotVar=setInterval($("#btn_login").click(function(){console.log("update");},20000));

        });

        $("#btn_login").click(function(){

             alert("hi");

        });

    });

    </script>


    <body>

    <form name="lgform">
    <div>

    <table id="table"  >
        <tr>

            <td width="35px"><input id="mob"  type="text" name="mob_nu" placeholder="1234567890"  maxlength="10"></td>

            <td width="100px"><input type="button" name="login_btn" id="btn_login" value="Login"></td>

            <td width="100px"><label for="Login" style="color: red" id="login_val"></label></td>

        </tr>

    </table>
    </div>
    </form>

    </body>
    </html>

单击 "btn_login" 后,我希望每 20 秒调用一次该函数,以便每 20 秒收到一次警报消息 "hi",但 "hi" 只是显示一次,setInterval 函数不起作用。我的代码有什么问题?感谢任何一段代码。

我尝试在这里以不同的方式使用设置间隔,因为我希望在我第一次点击后立即调用该函数,并在每 20 秒后继续,如果我们将设置间隔函数放在函数中,它将无法工作我们以通常的方式调用按钮点击。 提前致谢

setInterval($("#btn_login").click(function(){console.log("update");},20000));

上面将调用 jQuery.click 一次并将其 return 值 (一个 jQuery 对象)传递给 setInterval 但是setInterval 需要一个可调用函数作为它的第一个参数。

包装成匿名函数的正确方法:

setInterval(function() {
  $("#btn_login").click(function(){console.log("update");})
}, 20000);

但这仍然没有多大意义,因为这样一个新的点击事件处理程序将添加(但不会执行)到每二十秒一个元素。

您的代码有四个基本问题:

  1. 您在提交表单时执行所有操作,但您没有提交表单的机制(并且您的描述说您无论如何都不希望它在提交时触发)。
  2. 点击按钮时告诉浏览器执行操作的代码将传递给 setInterval,而不是相反。
  3. 您没有将函数传递给 setInterval
  4. 每个时间段您想要运行的代码与您的间隔代码相去甚远

您需要扔掉大部分代码并重新开始。

var interval;

function run_on_interval_when_button_is_clicked(){
    alert("hi!");
}

function run_when_button_is_clicked(event) {
    event.preventDefault();
    interval = setInterval(
        run_on_interval_when_button_is_clicked,
        20000
    );
}

$(document).ready(function(){
    $("#btn_login").on('click', run_when_button_is_clicked);
});

None与JSP有关系。那是服务器端代码。

var interval;

$('#btn').on('click',function(){
  
  if(typeof (interval) === 'undefined') {
    
    interval = setInterval(function(){
    alert('hi');
    },20000);
    
    }
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="btn">Click</button>

$('#btn_login').on('click', function(){
        setInterval(function(){ console.log("update"); }, 20000);
});

你的代码有很多问题。忽略其他问题,如果要为按钮点击的功能设置 20 秒的间隔,则需要在点击处理程序内部启动间隔。

    $("#btn_login").click(function(){

         setInterval( function () {
             alert('hi');
         }, 20000);

    });

当然,每次单击按钮时都会发生这种情况。解决它的一种方法是使用 .one('click', function() { setInterval...}) 而不是 .click() 因为它只会在第一次点击时起作用。但由于您似乎也想取消间隔,因此您也需要注意这一点。

编辑:

    var interval;
    $("#btn_login").one( 'click', function() {
         function run () {alert('hi');}
         run();
         interval = setInterval( run, 20000 );

    });
    // you can now cancel this interval somewhere else
    function someCallback () {
        if ( interval )
            clearInterval(interval);
    }