Witam
Mam problem z setTimeout wywołuje dwa razy metody wiec ustawiam nowy czas dla drugiego wywołania lecz ten czas jest po prostu olewany i dalej jadę na starym czasie sad.gif Czy ktoś może mnie wspomóc? Tak jak by liczył się tylko czas podany przy pierwszym wywołaniu metody.


  1. /*
  2.  * Klasa odpowiedzialna za wyświetlanie Boksów tekstowych z wiadomościami.
  3.  * Error, Info, Success
  4.  */
  5.  
  6. var DialogComponent = function() {
  7.  
  8. // Czas alertu
  9. this.time = 5;
  10.  
  11. // Typy Alertów
  12. this.type = new Object();
  13. this.type['error'] = 'alert-error';
  14. this.type['success'] = 'alert-success';
  15. this.type['info'] = 'alert-info';
  16.  
  17. // Wiadomość do przekazania
  18. this.message = '';
  19.  
  20. };
  21.  
  22. /*
  23.  * Wyświetlanie Dialogu
  24.  * type: typ alerta;
  25.  * message: wiadomość do przekazania;
  26.  */
  27. DialogComponent.prototype.box = function(type, message, time) {
  28.  
  29. // schowanie jeżeli istnieją
  30. this.private_hide();
  31.  
  32. // ustawienie czasu wyświetlania dialogu
  33. console.log(time);
  34. if (time !== undefined) {
  35. this.time = time;
  36. }
  37.  
  38. // ustawienie dialogu
  39. this.message = message;
  40. $('div.alert').addClass(this.type[type]);
  41. $('div.alert p').empty();
  42. $('div.alert p').append(this.message);
  43.  
  44. // włączenie interakcji (przycisk)
  45. this.private_interaction();
  46.  
  47. // uruchomienie animacji
  48. this.private_animation();
  49.  
  50. return true;
  51.  
  52. };
  53.  
  54. /*
  55.  * Animacja boksa znikającego w dół
  56.  */
  57. DialogComponent.prototype.private_animation = function() {
  58.  
  59. // Pojawienei się elementu
  60. $("div.alert").show("slide", {direction: "down"}, 1000);
  61.  
  62. // Ukrycie elementu po określonym czasie
  63. var time = setTimeout(function() {
  64. $("div.alert").hide("slide", {direction: "down"}, 1000);
  65. }, (this.time * 1000));
  66.  
  67. // przerwanie animaxcji
  68. $('div.alert').click(function() {
  69. clearTimeout(time);
  70. });
  71. };
  72.  
  73. /*
  74.  * Animacja boksa chowanie
  75.  */
  76. DialogComponent.prototype.private_hide = function() {
  77. $("div.alert").hide("slide", {direction: "down"}, 1000);
  78. };
  79.  
  80. /*
  81.  * Interakcja z okienkiem po kliknięciu chowa się.
  82.  */
  83. DialogComponent.prototype.private_interaction = function() {
  84. $('div.alert').on('click', 'span', function() {
  85. $("div.alert").hide("slide", {direction: "down"}, 1000);
  86. });
  87. };
  88.  
  89. /*
  90.  * Wyłączenie czasu po najechaniu myszką
  91.  */
  92. DialogComponent.prototype.private_mauseOnBox = function() {
  93. $('div.alert').on('click', 'span', function() {
  94. $("div.alert").hide("slide", {direction: "down"}, 1000);
  95. });
  96. };
  97.  
  98.  
  99. $(function() {
  100.  
  101. var Dialog = new DialogComponent();
  102. var msg = 'Wszystko poszło zgodnie z planem :) Nie musisz się już o nic martwić. Alerty będą gotowe by wyrywać skrzydełka niegrzecznym dzieciom';
  103. Dialog.box('success', msg, 1);
  104. Dialog.box('success', msg, 10); // DALEJ 1 SEKUNDA NIE 10 a raczej pozostały czas z poprzedniego.
  105.  
  106.  
  107. });