0

在正确调用函数之前reinitialise()(通过函数reinitializeScrollbar()),函数将被执行。有谁知道为什么?

$(document).ready(function () {

    $('.scrollContainer').jScrollPane();

    $('[id^=arr]').click(function (event) {
        var id = $(this).attr('id');
        var index = id.substring(4);
        //alert('Gib ID aus: ' +index);
        var skillDesc = "#skillDescript" + index;

        var arrTo2 = "#arr_" + index + ".arrow2";
        var arrTo1 = "#arr_" + index + ".arrow1";

        //alert('Gib skillDesc aus: ' +skillDesc);
        event.preventDefault();
        if ($(skillDesc).css("display") != "none") {
            $(skillDesc).slideUp(800, reinitializeScrollbar());
            console.log("ROLL IN!");
            $(arrTo2).toggleClass("arrow2", "arrow1");
        } else {
            $(skillDesc).slideDown(800, reinitializeScrollbar());
            console.log("ROLL OUT!");
            $(arrTo1).toggleClass("arrow2");
        }
    });

    function reinitializeScrollbar() {
        $('.scrollContainer').data('jsp').reinitialise();
        console.log("damn you");
    }
});
4

5 回答 5

3

当您尝试设置事件处理程序时,您正在调用该函数:

$(skillDesc).slideUp(800, reinitializeScrollbar());

相反,您只需将函数本身作为参数传递:

$(skillDesc).slideUp(800, reinitializeScrollbar);
于 2013-09-17T16:47:00.170 回答
2

您当前正在做的是立即调用该函数,方法是添加(). 这将做的是立即调用该函数,然后获取该函数调用的结果,并将该值作为回调传递。由于您要传递函数本身,因此不应调用该函数,只需将其作为回调传递:

$(skillDesc).slideUp(800, reinitializeScrollbar);
于 2013-09-17T16:47:05.427 回答
1

正确的语法是:

$(skillDesc).slideUp(800, reinitializeScrollbar);
于 2013-09-17T16:44:59.457 回答
0

采用

$(skillDesc).slideUp(800, reinitializeScrollbar);

或者

$(skillDesc).slideUp(800, function(){ reinitializeScrollbar() });
于 2013-09-17T16:46:08.473 回答
0

这很可能是因为您实际上是在调用reinitializeScrollbar()您想要将其分配为回调的函数。

这应该解决它:

$(document).ready(function () {

    $('.scrollContainer').jScrollPane();

    $('[id^=arr]').click(function (event) {
        var id = $(this).attr('id');
        var index = id.substring(4);
        //alert('Gib ID aus: ' +index);
        var skillDesc = "#skillDescript" + index;

        var arrTo2 = "#arr_" + index + ".arrow2";
        var arrTo1 = "#arr_" + index + ".arrow1";

        //alert('Gib skillDesc aus: ' +skillDesc);
        event.preventDefault();
        if ($(skillDesc).css("display") != "none") {
            $(skillDesc).slideUp(800, reinitializeScrollbar);
            console.log("ROLL IN!");
            $(arrTo2).toggleClass("arrow2", "arrow1");
        } else {
            $(skillDesc).slideDown(800, reinitializeScrollbar);
            console.log("ROLL OUT!");
            $(arrTo1).toggleClass("arrow2");
        }
    });

    function reinitializeScrollbar() {
        $('.scrollContainer').data('jsp').reinitialise();
        console.log("damn you");
    }
});
于 2013-09-17T16:47:32.223 回答