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

时间:2014-12-09 18:22:35

标签: javascript jquery html function onclick

我在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链接。

1 个答案:

答案 0 :(得分:1)

我能够使用这个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) });