setTimeout не работает в моем новом проекте Kendo MVC - PullRequest
0 голосов
/ 25 сентября 2018

Когда мои файлы javascript попадают в функцию setTimeout, он выдает следующую ошибку:

TypeError: свойства 'caller', 'callee' и 'arguments' могут быть недоступны в строгом режимефункции или объекты аргументов для вызова к ним

Функция находится в файле 'global.js' (показан в _layout.cshtml) и вызывается из $(document).ready, на мой взгляд:

<script>
$(document).ready(function () {
    loadGameStartupWindow();
});

Мой файл javascript (continueCountdown - это то, куда выдает ошибку):

function loadGameStartupWindow() {
    var window = $("#GameStartupWindow").data("kendoWindow");

    window.center().open();
}

function beginCountdown() {
    for (var i = 5; i > 0; i = i - 1) {
        continueCountdown(i);
    }
}

function continueCountdown(i) {
    setTimeout(function () {
        $("#countdownNumber").text(i);
    }, 1000);
}

My _layout.cshtml:

@Styles.Render("~/Content/css")
@Styles.Render("~/Content/kendo/2018.3.911/css")

@Scripts.Render("~/Scripts/_references.js")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryVal")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/kendo")

@Styles.Render("~/Content/Site.css")
@Scripts.Render("~/Scripts/global.js")

Конфиг Bundles:

public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryVal").Include(
                    "~/Scripts/jquery.validate.js",
                    "~/Scripts/jquery.validate.unobtrusive.js"));

        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-*"));

        bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                  "~/Scripts/bootstrap.js",
                  "~/Scripts/respond.js"));

        bundles.Add(new StyleBundle("~/Content/css").Include(
                 "~/Content/bootstrap.min.css",
                 "~/Content/Site.css"));

        bundles.Add(new ScriptBundle("~/bundles/kendo").Include(
            "~/Scripts/kendo/2018.3.911/kendo.all.min.js",
            // "~/Scripts/kendo/kendo.timezones.min.js", // uncomment if using the Scheduler
            "~/Scripts/kendo/2018.3.911/kendo.aspnetmvc.min.js"));

        bundles.Add(new StyleBundle("~/Content/kendo/2018.3.911/css").Include(
            "~/Content/kendo/2018.3.911/kendo.common-bootstrap.min.css",
            "~/Content/kendo/2018.3.911/kendo.bootstrap.min.css"));

        bundles.IgnoreList.Clear();
    }

Может кто-нибудь сказать мне, если я что-то здесь упускаю?

1 Ответ

0 голосов
/ 25 сентября 2018

Использование setTimeout таким образом означало, что моя функция перешла в «строгий режим», и вот мой обходной путь:

function beginCountdown() {
var i = 5;
setInterval(function () {
    if (i != 0) {
        $("#countdownNumber").text(i);
        i = i - 1;
    } else {
        clearInterval();
    }

}, 1000)
}

Дальнейшее чтение: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

...