Как я могу изменить этот код, чтобы заставить его работать?

#jquery

#jquery

Вопрос:

Я начинаю с Flask, и у меня возникли некоторые проблемы с jQuery и (я думаю) системой шаблонов Flask. То, что я хотел сделать, очень просто: я включилbehavior.js скрипт в главном шаблоне макета layout.html, после библиотеки jQuery. Его содержимое:

 jQuery(document).ready(function() {
    var events = $("#fake_grid td");
    while(events.length > 0) {
        $("#the_grid").append($("<tr/>").append(events.slice(0, 3)));
    }
    $("#fake_grid").remove();
});
  

Когда я пытаюсь выполнить это, мой браузер выходит из строя, и я не могу понять, почему и как это исправить. Я думал о том, что jQuery не загружается должным образом или загружается после моего скрипта, но я проверил с помощью FireBug, и все в этом вопросе работает нормально. Я попытался заменить весь этот код на alert (), и это тоже сработало нормально. Я пытался включить my .js в дочерний шаблонindex.html несколькими различными способами, но это было не так, наверняка. Возможно, это что-то с готовностью документа.

Если это что-то другое, я не могу это увидеть, и это меня действительно беспокоит. Итак, есть какие-нибудь советы, что с этим делать? Что я делаю не так? Заранее спасибо.

Комментарии:

1. Если ваш браузер выходит из строя, это не связано с flask / jinja, а связано с чистым JS. Я предполагаю, что ваш код каким-то образом приводит к бесконечному циклу.

Ответ №1:

 jQuery(document).ready(function() {
    var events = $("#fake_grid td");
    while(events.length > 0) {
        $("#the_grid").append($("<tr/>").append(events.slice(0, 3)));
    }
    $("#fake_grid").remove();
});
  

.slice не является разрушительным. Он возвращает новый набор с удаленными.

Это означает, что ваш цикл выполняется вечно, поскольку .length никогда не достигает нуля.

Это должно сработать, хотя

 jQuery(document).ready(function() {
    $("#fake_grid td").each(function(i, val) {
        $("#the_grid").append($("<tr></tr>").append(this));
    });
    $("#fake_grid").remove();
});