我使用AJAX请求填充无序列表。填充后,我希望它立即隐藏,所以我可以在需要时展示它。我尽可能地删除了代码,以明确这一点。 AJAX代码将使用class = DropDownElement为我构建一个li元素。很快,当请求完成时,我希望它们隐藏起来,但是现在,它并没有按预期工作。 我猜,那是因为jQuery无法检查是否出现了新的'.DropdownElements'。
我使用以下代码:
function populateDropDown (){
var currentID = $(this).attr("id");
$('.DropDownElement').remove();
$.ajax({
url: 'xml/wooddata.xml',
type: 'get',
dataType: 'xml',
success: function(data) {
$(data).find('wood[id="' + currentID + '"]').each(function(){
var hasTraversal = $(this).find('images[rotation="traversal"]').children().length > 0;
if (hasTraversal) {
$(this).find('images[rotation="traversal"] image_description[lang="' + activeLanguage + '"]').each(function(){
var description = $(this).text();
$('#TraversalSelector').append('<li value="' + currentID + '" class="DropDownElement" id="' + currentID + '" data-rotation="traversal">' + description + '</li>');
});
};
});
}
});
$('.DropDownElement').hide();
};
答案 0 :(得分:1)
ajax()
功能发送请求。在调用该函数后,您将隐藏下拉元素。
在收到响应并调用success
函数之前,元素不存在。
在hide()
功能中移动success
来电。
答案 1 :(得分:1)
将$('.DropDownElement').hide();
放在最后success: function(data) {}
success: function(data) {
....
$('.DropDownElement').hide();
}
答案 2 :(得分:0)
错误的原因是javascript并行执行所有语句
所以你应该在成功函数中调用.hide()
函数,如果你想在它之后发生它。
还要添加一个错误函数:在ajax调用中并调用其中的hide函数
您也可以尝试添加超时
setTimeout(function(){ $('.DropDownElement').hide();},1000);
答案 3 :(得分:0)
.hide在ajax请求之后工作。
条件是不应该通过$('。DropDownElement')删除元素.remove();或(像这样) 删除后,任何元素都不会隐藏。 隐藏,元素应该在那里。