javascript - 重复提交搜索表单时添加和删除 Owl Carousel 项目

标签 javascript jquery ajax owl-carousel

每当按 Enter 键提交搜索表单时,我都会使用 AJAX 调用来获取我的 carousal 项目。我想在按下 Enter 时删除以前的项目并向 carousal 添加新项目。

它一直运行良好,除非反复按下 Enter,它不会删除旧项目,只会不断添加新项目。

删除项目

function removeResult() {
    var i = 0;

    $("#result_section").slideUp(750, function () {

        $('.result_item').each(function(){

            $(".prof-carousel").trigger('remove.owl.carousel', [i++])
            .trigger('refresh.owl.carousel');

         });

    });

}

添加项目

$("#index_search_btn").click(function (e) {

    e.preventDefault();

    removeResult();

    var formData = new FormData();

    formData.append('type', search_type);

    formData.append('q', search_q);

    $.ajax({
        type: "POST",
        contentType: false,
        processData: false,
        url: "/search",
        data: formData,
        success: function (response) {

       $("#result_section").slideDown(750, function () {

           $.each(response, function (index, prof) {

               var item = '';

               item += '<div class="item carousel_ostad_item result_item">'+ 'whatever...'+'</div>';


          $('.my-carousel').owlCarousel().trigger('add.owl.carousel',[jQuery(item)]).trigger('refresh.owl.carousel');
            });

        });
    },

    error: function (xhr, ajaxOptions, thrownError) {

         alert(xhr.status + " " + thrownError);

         }

    });

});

最佳答案

可能是因为 Ajax 是异步的并且更慢并且会发生类似于以下的事情:

Enter -> Remove (old el) -> Ajax call 1 -> Enter -> Remove (nothing) -> Ajax call 2 -> Ajax callback 1 ADD -> Ajax callback 2 ADD

我希望它是清楚的,我不知道如何表达这一点。

您可以做的是在 success Ajax 回调中删除旧元素。

$("#index_search_btn").click(function (e) {
    e.preventDefault();

    // #### Remove this...
    //removeResult();

    var formData = new FormData();
    formData.append('type', search_type);
    formData.append('q', search_q);

    $.ajax({
        type: "POST",
        contentType: false,
        processData: false,
        url: "/search",
        data: formData,
        success: function (response) {

            // ... and move here. ####
            removeResult();

            $("#result_section").slideDown(750, function () {

                $.each(response, function (index, prof) {
                    var item = '';
                    item += '<div class="item carousel_ostad_item result_item">'+ 'whatever...'+'</div>';
                    $('.my-carousel').owlCarousel().trigger('add.owl.carousel',[jQuery(item)]).trigger('refresh.owl.carousel');
                });

            });

        }, error: function (xhr, ajaxOptions, thrownError) {
            alert(xhr.status + " " + thrownError);
        }

    });

});

关于javascript - 重复提交搜索表单时添加和删除 Owl Carousel 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734252/

相关文章:

javascript - 如何选择DOM中除一个元素之外的所有元素?

php - 将 "next tuesday 5pm"等文本翻译为日期(类似于谷歌日历)

javascript - 使用 jQuery 选择器和 setSelectionRange 不是一个函数

javascript - jQuery .delegate() 和 .undelegate() 在 chrome 56 及以上版本中不起作用

jquery - 在 Bootstrap 中从 img 中删除填充

javascript - 具有多个不同输入的文件上传进度条(MVC)

javascript - ReactJs 子组件未通过 Props 更新

javascript - 页面加载时触发 keyup

html - jQuery html() 丢失样式

jquery - 进行异步 AJAX 调用时如何防止在 Android 中卡住 PhoneGap 应用程序?