在AJAX请求之后,jQuery .hide()不会执行

时间:2015-07-22 11:00:23

标签: javascript jquery ajax xml html5

我使用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();

};

4 个答案:

答案 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();或(像这样) 删除后,任何元素都不会隐藏。 隐藏,元素应该在那里。