2016-09-10 4 views
1

이 스크립트는 동적으로 추가되었습니다. 그것은 타임 아웃 기능을 가지고 있으며 5 초마다 실행된다는 것을 의미합니다.DOM에서 제거한 후에도 계속 동적으로 추가 된 기능이

I가 사용 DIV이 함수를 불러

$(document).ready(function(){ 

(function($){ 

$.fn.baslatmesajlari = function() { 

setInterval(function(){ 

console.log("I am running"); 

}, 5000); 

     return this; 
    }; 
})(jQuery); 

}); 

$("body").baslatmesajlari(); 

dynamicjs.php;

$("#temporarycontent").load("dynamicjs.php"); 

내가

$("#temporarycontent").empty(); 

을 수행 할 때 스크립트는 아직 실행 중입니다. 어떻게 멈추게 할 수 있습니까?

+3

간격을 지우는 방법을 제공해야합니다. –

+2

도움을 청할 때 코드를 들여 쓰기 쉽게 읽을 시간을 가져주십시오. –

답변

-1

당신은 당신이 그것을 실행의 중지 할 때, 다음, 간격 ID에 대한 참조가 다음 clearInterval(the_id)

let interval = null //this is the variable which will hold the setInterval id 
$(document).ready(function() { 
    (function ($) { 
    $.fn.baslatmesajlari = function() { 
     interval = setInterval(function() { 
     console.log('I am running') 
     }, 5000) 
     return this 
    } 
    })(jQuery) 
}) 
$("body").baslatmesajlari() 

그리고 호출해야합니다 :

$("#temporarycontent").empty(); 
clearInterval(interval) // it should stop the function. 

희망이 있습니다.

+0

매력처럼 일했습니다! "할 수 없다"고 말한 다른 사람들에게 나를 웃게 해줘서 고마워. – user3304007

+0

그들은 "당신이 할 수있는 방법이 없습니다"라는 방식으로는 할 수 없다고 말하지 않았고, Plalx는 "setInterval 함수가 반환 한 intervalId를 처리 할 필요가 없습니다"라고 말하면서, 간격 ID와 함께 할 수 없을 것입니다. 또한 전역 변수를 피하십시오. 이것은 불쾌한 해결책입니다. 그것은 잘 작동합니다 :) Abrazo che :) –

+1

@ user3304007 우리는 플러그인 자체를 수정하지 않고는 불가능하다는 것을 의미했습니다. 그런데이 솔루션은 전역에 의존하기 때문에 매우 나쁩니다. 즉, 현재이 플러그인의 인스턴스를 두 개 이상 가질 수 없으며 플러그인이 내부를 유출하여 캡슐화되지 않았습니다. 기본적으로 이것은 플러그인이 아닙니다. – plalx

5

setInterval 함수에 의해 반환 된 intervalId에 대한 핸들이 필요하거나 플러그인 자체에 파괴 및 정리를 위해 API를 제공 할 수는 없습니다. 가장 쉬운 방법은 플러그인의 상태를 적용한 DOM 요소에 첨부하는 것입니다.

(function ($) { 
 
    
 
    const PLUGIN_NAME = 'baslatmesajlari'; 
 
    
 
    function Plugin($el) { 
 
     this.$el = $el; 
 
     this._timerId = setInterval(function() { 
 
     console.log('running'); 
 
     }, 2000); 
 
    } 
 
    
 
    Plugin.prototype.destroy = function() { 
 
     this.$el.removeData(PLUGIN_NAME); 
 
     clearInterval(this._timerId); 
 
    }; 
 
    
 
    $.fn[PLUGIN_NAME] = function() { 
 

 
     if (!this.data(PLUGIN_NAME)) this.data(PLUGIN_NAME, new Plugin(this)); 
 
     
 
     return this; 
 
    }; 
 

 
})(jQuery); 
 

 
$(function() { 
 
    var plugin = $('#plugin').baslatmesajlari().data('baslatmesajlari'); 
 
    
 
    $('#destroy').click(function() { 
 
    plugin.destroy(); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="plugin"></div> 
 

 
<button id="destroy">Destroy plugin</button>

관련 문제