【问题标题】:Add and remove owl carousal items when search form is submitted repeatedly重复提交搜索表单时添加和删除猫头鹰轮播项目
【发布时间】:2019-02-17 14:32:32
【问题描述】:

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

它一直都很好用,除了重复按 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);

         }

    });

});

【问题讨论】:

    标签: javascript jquery ajax owl-carousel


    【解决方案1】:

    可能是因为 Ajax 是异步的且速度较慢,并且会发生类似以下情况:

    Enter -&gt; Remove (old el) -&gt; Ajax call 1 -&gt; Enter -&gt; Remove (nothing) -&gt; Ajax call 2 -&gt; Ajax callback 1 ADD -&gt; 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);
            }
    
        });
    
    });
    

    【讨论】:

      【解决方案2】:

      我确实想出了一个简单的解决方案。 我在按下时禁用了搜索按钮(因此无法重复提交表单)并在成功的 Ajax 回调中添加轮播项目后再次启用它。

      $("#index_search_btn").click(function (e) {
      e.preventDefault();
      ///// disable search button /////
      $("#index_search_btn").attr("disabled", true);
      
      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');
      
                      ///// enable search button /////
                      $("#index_search_btn").removeAttr("disabled");
                  });
      
              });
      
          }, error: function (xhr, ajaxOptions, thrownError) {
              alert(xhr.status + " " + thrownError);
          }
      
      });
      
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多