Я пробовал решение найдено здесь: How do I add a delay in a JavaScript loop?, но я не мог заставить его работать для меня.Добавить Delay to For Loop
jQuery.fn.createEntry = function() {
$("#List").append('<span>New Entry</span>');
$("#List span").draggable({ grid: [30,45] });
}
jQuery.fn.tenTimes = function() {
for (var i = 1; i <= 10; i++){
$(document).createEntry();
}
}
В .createEntry() сценарий, новый объект переплетены в плагин .draggable() у меня есть. Я использую сочетание клавиш (keyup) для запуска этой функции tenTimes(). Если я нажимаю клавишу более одного раза слишком быстро, многие из новых объектов не будут перетаскиваться. Похоже, случайные объекты не могут стать перетаскиваемыми. Я думал, что, возможно, мои быстрые нажатия клавиш нарушают событие привязки для тех, которые терпят неудачу, но даже если я пойду медленно, некоторые из них не станут перетаскиваемыми.
Есть ли способ проверить, правильно ли был привязан объект, прежде чем переходить к циклу for? Есть ли более строгий подход? К сожалению, это не анимация, поэтому я не могу использовать .delay().
РЕШЕНИЕ
Это был третий сценарий я собираюсь что обрабатываются элементы с помощью appendTo() в том, что является причиной проблемы.
Использование append() или appendTo() похоже на то, что объект привязан к перетаскиваемому объекту, но он по-прежнему теряет левый/верхний CSS, поэтому его нельзя перетаскивать. Вместо того, чтобы вычислять некоторые .css() хак (значения уникальны для каждого), я просто создал совершенно новый элемент и скопировал соответствующие данные, а затем удалил() старый. Draggable привязан к нему должным образом в какой-то другой точке. При этом проблема исправлена.
Вероятно, проблема заключается в функции createEntry(). –
Можете ли вы опубликовать 'createEntry'? –
@joeframbach - я добавил функцию; это очень просто, поэтому я опустил его, но это может быть синтаксис, который нарушает его. –