函数reinitialise()将在调用之前执行

在正确调用函数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"); } }); 

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

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

相反,您应该将函数本身作为参数传递:

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

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

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

正确的语法是:

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

使用

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

要么

 $(skillDesc).slideUp(800, function(){ reinitializeScrollbar() }); 

这很可能是因为您实际上正在调用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"); } });