Javascript 动态添加的函数即使从DOM中删除后仍在运行

Javascript 动态添加的函数即使从DOM中删除后仍在运行,javascript,jquery,Javascript,Jquery,此脚本已动态添加。它有一个超时功能,意味着它每5秒运行一次 dynamicjs.php 我使用将此函数加载到div $("#temporarycontent").load("dynamicjs.php"); 当我这么做的时候 $("#temporarycontent").empty(); 脚本仍在运行。如何停止它的运行?你不能,你需要一个setInterval函数返回的intervalId的句柄,或者在插件上提供一个API,以便销毁它并在其自身之后进行清理。最简单的方法是将插件的状态附加到应

此脚本已动态添加。它有一个超时功能,意味着它每5秒运行一次

dynamicjs.php

我使用将此函数加载到div

$("#temporarycontent").load("dynamicjs.php");
当我这么做的时候

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

脚本仍在运行。如何停止它的运行?

你不能,你需要一个setInterval函数返回的intervalId的句柄,或者在插件上提供一个API,以便销毁它并在其自身之后进行清理。最简单的方法是将插件的状态附加到应用插件的DOM元素

功能${ const PLUGIN_NAME='baslatmesajlari'; 函数插件$el{ 这.$el=$el; 这是。_timerId=setIntervalfunction{ console.log'running'; }, 2000; } Plugin.prototype.destroy=函数{ 此.$el.removeDataPLUGIN\u NAME; clearIntervalthis.\u timerId; }; $.fn[插件名称]=函数{ 如果!this.dataPLUGIN\u NAME this.dataPLUGIN\u NAME,新插件此; 归还这个; }; }jQuery; $function{ var plugin=$'plugin'.baslatmesajlari.data'baslatmesajlari'; $“销毁”。单击函数{ plugin.destroy; }; };
销毁插件你不能,你需要一个setInterval函数返回的intervalId的句柄,或者在插件上提供一个API,以便销毁插件并在插件本身之后进行清理。最简单的方法是将插件的状态附加到应用插件的DOM元素

功能${ const PLUGIN_NAME='baslatmesajlari'; 函数插件$el{ 这.$el=$el; 这是。_timerId=setIntervalfunction{ console.log'running'; }, 2000; } Plugin.prototype.destroy=函数{ 此.$el.removeDataPLUGIN\u NAME; clearIntervalthis.\u timerId; }; $.fn[插件名称]=函数{ 如果!this.dataPLUGIN\u NAME this.dataPLUGIN\u NAME,新插件此; 归还这个; }; }jQuery; $function{ var plugin=$'plugin'.baslatmesajlari.data'baslatmesajlari'; $“销毁”。单击函数{ plugin.destroy; }; };
销毁插件您必须有一个对间隔id的引用,然后,当您想要停止它的执行时,调用clearIntervalthe_id

然后:

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

希望有帮助。

您必须有一个对间隔id的引用,然后,当您想停止它的执行时,调用clearIntervalthe\u id

然后:

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

希望能有所帮助。

您需要提供一种方法来清除间隔。请求帮助时,请花时间以可读的方式缩进代码。您需要提供一种方法来清除间隔。请求帮助时,请花时间以可读的方式缩进代码。非常有效!谢谢你让我对那些说你做不到的人发笑。他们没有说你做不到,因为你做不到,Plalx说你做不到,你需要一个setInterval函数返回的intervalId的句柄,这意味着没有interval id你就做不到:另外,避免全局变量,这是一个令人讨厌的解决办法。很高兴看到它成功了:Abrazo che:@user330407我们的意思是,如果不修改插件本身,你就不能。顺便说一下,这个解决方案非常糟糕,因为它依赖于全局。这意味着你现在不能有这个插件的多个实例,插件正在泄漏它的内部,所以它根本没有被封装。基本上,这根本不是一个插件…@plalx-gotcha。谢谢。@plalx已经建议过i donno的用户,如果这个词在英语中存在的话,可以使用globals:,顺便说一句,我投你的票。更漂亮的哈哈,像个魔咒!谢谢你让我对那些说你做不到的人发笑。他们没有说你做不到,因为你做不到,Plalx说你做不到,你需要一个setInterval函数返回的intervalId的句柄,这意味着没有interval id你就做不到:另外,避免全局变量,这是一个令人讨厌的解决办法。很高兴看到它成功了:Abrazo che:@user330407我们的意思是,如果不修改插件本身,你就不能。顺便说一下,这个解决方案非常糟糕,因为它依赖于全局。这意味着你现在不能有这个插件的多个实例,插件正在泄漏它的内部,所以它根本没有被封装。基本上,这根本不是一个插件…@plalx-gotcha。谢谢。@plalx已经建议过i donno的用户,如果这个词在英语中存在的话,可以使用globals:,顺便说一句,我投你的票。多好啊哈哈
$("#temporarycontent").empty();
clearInterval(interval) // it should stop the function.