为 onClick of 按钮定义的所有函数都被调用

All the functions defined for onClick of button are getting called

本文关键字:函数 调用 onClick of 按钮 定义      更新时间:2023-09-26

我在jsp和js中有以下代码。正在发生的事情是,无论我单击哪个按钮,都会调用这两个 javascript 函数。我不确定我在这里错过了什么?

.HTML:

<a type="button" id="scrollOffsetDiv" href="dashboard?offloglag=off&duration=${duration}#offset">Offset</a>
<a type="button" id="scrollMsgDiv" href="dashboard?offloglag=off&duration=${duration}#offset">Msg</a>

.JS:

    $(document).on("click","#scrollOffsetDiv", setTimeout(scrollOffsetDiv,3000));
    function scrollOffsetDiv() {
        var scrollTop     = $(window).scrollTop(),
            elementOffset = $('#offset').offset().top,
            scrollDistance      = (scrollTop-elementOffset);
        alert("2222222222");
        $('html, body').animate({
            scrollTop: scrollDistance
        }, 200);
    }
    $(document).on("click","#scrollMsgDiv", setTimeout(scrollMsgDiv,3000));
    function scrollMsgDiv() {
        var scrollTop     = $(window).scrollTop(),
            elementOffset = $('#msgsbytesinpersec').offset().top,
            scrollDistance      = (scrollTop-elementOffset);
        alert("33333333");
        $('html, body').animate({
            scrollTop: scrollDistance
        }, 200);
    }

添加 jsfiddle 链接。

我能够让它使用这个jQuery代码:

$("#scrollOffsetDiv").click(function(){ setTimeout(scrollOffsetDiv,3000); });
function scrollOffsetDiv() {
    alert("2222222222");
}
$("#scrollMsgDiv").click(function() { setTimeout(scrollMsgDiv,3000) });
function scrollMsgDiv() {
    alert("33333333");
}

虽然我相信主要问题只是需要将您的setTimeout功能包装在function(){}中。没有该包装器似乎仅适用于对函数的非参数化调用......如果您使用变量调用函数,请将其包装在 function(){} 中。

任何人想提高我在这个问题上的词汇量,请随意。我只是通过观察才知道这一点。

一种更优雅的编写方式可能是:

$("#scrollOffsetDiv").click(function(){ setTimeout(function(){
    var scrollTop     = $(window).scrollTop(),
        elementOffset = $('#offset').offset().top,
        scrollDistance      = (scrollTop-elementOffset);
    alert("2222222222");
    $('html, body').animate({
        scrollTop: scrollDistance
    }, 200);
},3000); });
$("#scrollMsgDiv").click(function() { setTimeout(function(){
    var scrollTop     = $(window).scrollTop(),
        elementOffset = $('#msgsbytesinpersec').offset().top,
        scrollDistance      = (scrollTop-elementOffset);
    alert("33333333");
    $('html, body').animate({
        scrollTop: scrollDistance
    }, 200);
},3000) });