【发布时间】:2014-11-02 17:49:16
【问题描述】:
我的文档中有对象。我在“每个”方法中从这些对象创建一个数组,并尝试在另一个“每个”方法中获取它们。我在控制台中为两个“每个”方法编写数组。元素匹配,但它们的位置不匹配。
var deletedObjects = [];
$(".active").each(function (index) {
var deletedObject = $(this);
console.log(deletedObject.position());
console.log("-------------------------------------");
deletedObjects.push(deletedObject);
deletedObject.delay(100 * index).fadeOut(100);
}).promise().done(function () {
console.log("Same list again");
console.log("-------------------------------------");
$.each(deletedObjects,function(){
console.log($(this).position());
console.log("-------------------------------------");
});
});
console.log 输出
Object {top: 80, left: 160}
-------------------------------------
Object {top: 80, left: 200}
-------------------------------------
Object {top: 80, left: 240}
-------------------------------------
Same list again
-------------------------------------
Object {top: 0, left: 0}
-------------------------------------
Object {top: 0, left: 0}
-------------------------------------
Object {top: 0, left: 0}
-------------------------------------
这个代码deletedObject.delay(100 * index).fadeOut(100); 是否在第二个之前运行?为什么元素位置会发生变化?我该如何解决这个问题?
【问题讨论】:
-
元素位置已更改,因为它不再显示...是的动画(
fadeOut)在第二个之前执行...因为您已将该代码作为完成回调附加到动画队列承诺 -
@ArunPJohny,谢谢。但是我该如何解决呢?
-
jsfiddle.net/arunpjohny/bsa2jL88/1 - 你为什么使用
promise().done()? -
你能用另一个像 id 这样的 attr 试试吗?我猜也许淡出会改变 div 的位置
-
因为有一个事件,我在第一个“each”方法之前停止它,并在 promise().done() 中再次绑定它的事件。检查这个:stackoverflow.com/questions/25708839/…
标签: javascript jquery arrays each