我从jQuery 1.10.2中得到了一个错误,最后一个错误,我知道是否有任何(其他)解决方案可以解决这个问题。
我的脚本从一个模型(项目模型)创建多个DIV块(命名项目),在最后一个模型之后添加当前值并以“盲”效果显示它。
以下是代码,但您也可以在this link在线测试。
<div id="item_model" style="display: none;" class="item">MODEL</div>
<button class="addBtn">Add 5 items</button>
<script>
$(".addBtn").click(function() {
for( var i=0; i<5; i++ ) {
// Clone model
var p = $("#item_model").clone(true, true);
// Modify item
p.removeAttr("id");
p.text("ITEM n°"+(i+1));
// Add item to the DOM
$(".item").last().after(p);
// Show item
$(p).show("blind");
//$(p).show();
}
});
</script>
问题与:last和insertAfter()。
相同逻辑:
这种行为是jQuery的一个错误,但我必须克服这个问题。
我知道的解决方案:
感谢您的贡献。
答案 0 :(得分:1)
这段代码修复了它:
$(".addBtn").click(function () {
var p = $("#item_model").clone(true),
tmp = $();
p.removeAttr("id");
for (var i = 0; i < 5; i++) {
tmp = tmp.add(p.clone(true).text("ITEM n°" + (i + 1)));
}
$(".item").last().after(tmp);
tmp.show("blind");
});
答案 1 :(得分:1)
我找到了一个合理的(如果错综复杂的)解释你的错误。
根本原因:您正在使用jquery-ui
效果(不是基本的jquery
效果),并且在动画结束之前在最后插入的项目之后添加元素。
getcha:jquery-ui在其动画中使用包装器,如果已经存在包装器,它会重用它。
以下是详细的演练:
ui-effects-wrapper
类的div中,并且此包装div被设置为动画以提供blind
效果createWrapper
中的快捷方式,见下文)相关代码:
jquery-ui code : snippet 1 - blind()
function
jquery-ui code : snippet 2 - createWrapper()
inner function
jquery-ui code : snippet 3 - blind()
code when animation completes
我不认为这应该被认为是一个jquery-ui错误 - 你的用例是,恕我直言,相当孤立,我不会想象这会在其他地方触发“纠正”。
解决方案:
slideDown
将有效(fiddle - 它会动画元素,不会有包装)<span id="beacon"></span>
项并在 #beacon
.append()
在一个公共容器上