2013-09-17 2 views
0

Перед правильным вызовом функции reinitialise() (по функции reinitializeScrollbar()) функция будет выполнена. У кого-нибудь есть идея, почему?Функция reinitialise() будет выполнена до ее вызова

$(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"); 
    } 
}); 

ответ

3

Вы вызова функцию при попытке создать обработчик событий :

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

Вместо этого, вы просто должны пройти саму функцию в качестве параметра:

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

Правильный синтаксис:

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

использование

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

или

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

+1 для показа 2 метода –

+1

Он не делает разницы в этом примере, но, вероятно, следует отметить, что есть разница в том, как называется 'reinitializeScrollbar' , В первом случае _context_ ('this')' reinitializeScrollbar' является элементом, который является 'slidedUp', для второго он является« оконным »объектом. –

+0

Thx много! Оно работает! Wolfgang – user2788492

2

Что вы делаете в данный момент сразу же вызова функции, добавив (). То, что это будет делать, это немедленно вызвать функцию, а затем взять результат этого вызова функции и передать это значение в качестве обратного вызова. Так как вы хотите, чтобы передать функции себя, вы не должны вызывать функцию, просто передать его в качестве обратного вызова:

$(skillDesc).slideUp(800, reinitializeScrollbar); 
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"); 
    } 
}); 
Смежные вопросы