如何使用slideDown()显示动态生成的元素
How to display dynamically generated elements with slideDown()?
当#select-element
值更改时,我使用以下代码更改.elements
的内容:
$("#select-element").on('change', function () {
var dtype = $("#select-element").val();
$.ajax({
type: 'GET',
url: '/?type='+dtype,
dataType: 'json',
success: function(result) {
for (var r in result) {
var row = ' '
<div class="row">result[r].name '
</div> '
';
$('.elements').prepend(row);
}
},
error: function (jqXHR, textStatus) {
},
beforeSend: function(){
$(".elements").slideUp(function() {
$(".elements").children().remove();
});
},
complete: function(){
$(".elements").slideDown();
}
});
});
如果我删除slideUp()
函数,效果会很好。但如果它在那里,则不会显示新内容。问题似乎出在slideDown()
函数上,它不想显示动态生成的元素。
我该怎么修?
问题是slideUp()的持续时间默认为400ms。然后,在400毫秒后,您将移除子项。
假设ajax在200ms内完成(比动画持续时间更短)。。。您的新内容将在调用children().remove()
时插入。
我建议您删除beforeSend
和complete
,并将所有内容组合到success
处理程序内的slideUp
回调中。
$.ajax({
type: 'GET',
url: '/?type=' + dtype,
dataType: 'json',
success: function(result) {
var $elems = $(".elements");
// do slideUp
$elems.slideUp(function() {
// now change content
$elems.empty();
for (var r in result) {
var row = ' '
<div class="row">result[r].name '
</div> '
';
$elems.prepend(row);
}
// and display new content
$elems.slideDown();
});
},
error: function(jqXHR, textStatus) {}
});
另一种选择是使用jQuery动画
相关文章:
- 将列表元素动态添加到ul元素中
- 将输入 html 元素动态关联到颜色选取器
- 媒体元素 - 动态加载音频
- 根据其内部元素动态更改 CSS
- 编写脚本以向元素动态添加.current(类似活动类)的场景
- 使用knockoutjs虚拟元素动态创建html部分
- 将JS中的元素动态添加到XUL中
- 如何从jquery中获得元素动态附加的完整表
- 使用jquery向li元素动态添加类
- 点击事件不't在尝试将元素动态添加到<ul>标签
- 使用Knockout.js Issue将元素动态添加到嵌套列表中
- 如何从DOM元素动态禁用popover
- 将样式元素动态插入DOM的最后一种跨浏览器方式
- 无法将元素动态添加到数组中
- 指令如何等待元素'动态插值属性被处理?
- 设置活动元素和非活动元素(动态)
- 是否可以使用JS/PHP为网页中的元素动态分配ID
- 如何制造<光>元素动态调整以填充浏览器窗口的整个宽度
- 基于页面元素动态构建菜单结构
- 向现有元素动态添加删除绑定