javascript - 清除由 class.each 创建超时的每个操作应用的 setTimeouts

标签 javascript jquery html dom

很抱歉,这个标题可能没有多大意义。我不知道如何表达我正在做的事情。

我有一个类,添加到使用 HTML5 数据属性来设置刷新计时器的元素中。这是当前代码。

$(document).ready(function () {
    $('.refresh').each(function() {
        var element = $(this);
        var url = element.data('url');
        var interval = element.data('interval');
        var preloader = element.data('show-loading');
        var globalPreloader = true;

        if (typeof preloader === 'undefined' || preloader === null) {
        }
        else if (preloader != 'global' && preloader != 'true') {
            globalPreloader = false;
        }

        (function(element, url, interval) {
            window.setInterval(function () {

                if (!globalPreloader)
                {
                    $('#' + preloader).show();
                }

                $.ajax({
                    url: url,
                    type: "GET",
                    global: globalPreloader,
                    success: function (data) {
                        element.html(data);

                        if (!globalPreloader) {
                            $('#' + preloaderID).hide();
                        }
                    }
                });

            }, interval);
        })(element, url, interval);
    });
    $.ajaxSetup({ cache: false });
});

现在我有一些元素,用户可以单击“窗口”来删除它。 这些元素可能会厌倦由上述代码设置的计时器。

用于删除元素的代码

$(".btn-close").on('click', function () {
    var id = $(this).closest("div.window").attr("id");

    if (typeof id === 'undefined' || id === null) {
    } else {
        $('#' + id).remove();
    }
});

我现在需要终止为删除的元素创建的计时器。

最好的方法是什么?

最佳答案

不清楚如何清除它们,所以我最后在这里将它们全部清除。

$(document).ready(function () {
    $('.refresh').each(function () {
        var element = $(this);
        var url = element.data('url');
        var interval = element.data('interval');
        var showLoading = element.data('show-loading');
        var preloaderID = element.data('preloader-id');

        if (typeof showLoading === 'undefined' || showLoading === null) {
            showLoading = true;
        }

        (function (element, url, interval) {

            var timerid = window.setInterval(function () {

                if (showLoading) {
                    $('#' + preloaderID).show();
                }

                $.ajax({
                    url: url,
                    type: "GET",
                    global: showLoading,
                    success: function (data) {
                        element.html(data);

                        if (showLoading) {
                            $('#' + preloaderID).hide();
                        }
                    }
                });

            }, interval);
            element.data("timerid",timerid );//add the timerid
        })(element, url, interval);
    });
    $.ajaxSetup({
        cache: false
    });
    $('.refresh').each(function () {
       var timerId = $(this).data("timerid");
       window.clearInterval(timerId);
    });
});

示例:删除点击计时器

$('.refresh').on('click', function () {
    var timerId = $(this).data("timerid");
    window.clearInterval(timerId);
});

关于javascript - 清除由 class.each 创建超时的每个操作应用的 setTimeouts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903713/

相关文章:

javascript - Fetch 无法识别 102(或任何 1xx)状态代码

javascript - 动态渲染复选框并处理更改事件: React+Typescript

javascript - 在移动设备上使用 Chrome 浏览器强制视频自动播放

html - 背景图片不能随内容上移

javascript - Bootstrap 无法处理非常大的屏幕分辨率

javascript - 在 JavaScript 中动态创建复杂对象

javascript - 在 JQuery 中解析 JSON 文件

JavaScript/jQuery : create and post virtual form

jquery - 使用 for 循环创建有效的 json 数据

css - 响应式 2 列 2 行布局