JQuery在ajax调用之后保持类

时间:2017-04-06 12:27:10

标签: javascript jquery json ajax

首先是一些重要的信息。我无法改变所使用的调用,代码,函数等中的任何内容。所以底线是我必须使用一种解决方法。

好的我有一个包含一些字段和下拉列表的表单。 在加载该表单时,我使用一些jquery隐藏了一个特定的字段。当值与数组中的某个值匹配时,该字段将被隐藏。我面临的问题是,当我们使用dropdown时,会对外部服务(对于国家/地区)进行json调用,然后正在更新表单。

由于在成功完成json调用之后我无法访问更新表单的代码,因此我需要找到一些内容来检查是否所有内容都已完成加载,如果是,则再次隐藏我的特定字段。

说清楚:

<div class="checkout-shipment-methods hidden">
    <input id="EuPack" name="shipment_method" value="EuPack" type="radio">
    <label for="EuPack">Delivered at home</label>
 </div>
 <div class="checkout-shipment-methods">
    <input id="Pack" name="shipment_method" value="Pack" type="radio">
    <label for="Pack">Delivered at work</label>
 </div>      
<select id="billing_address-country" name="billing_address[country]">
   <option value="be" selected="selected">België</option>
   <option value="dk">Denemarken</option>
   <option value="de">Duitsland</option>
</select>      
现在隐藏了

input。当我更改select时,表单会更新,并且类hidden会被删除。

如果我更改select,则会进行2次调用 - &gt; enter image description here

所以我想检查是否进行了这些调用,如果是,再次添加该类hidden

像这样:

    $(function(){

      var a = [ 'FP32PE4','FP32LE4' ];
      var b = [ 'FP32PE1','FP32PE4' ];

          $.each( a, function( key, value ) {
            var index = $.inArray( value, b );
            if( index != -1 ) {

              var $id =  $('.checkout-shipment-methods:first-of-type');
              $id.addClass('hidden');
              localStorage.setItem("selectedolditem", $id);

                  $.ajax({
                    url: "url-to-link-in-image/nl/checkout/onestep/details/",
                    beforeSend: function( xhr ) {
                        xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
                    }
                  }).
                  then(function( data, textStatus, jqXHR ) {
                    console.log('success');
                       var selectedolditem = localStorage.getItem('selectedolditem');
                       if (selectedolditem != null) {
                         $('.checkout-shipment-methods:first-of-type').addClass("hidden");
                        }   

                      }, 
                      function( jqXHR, textStatus, errorThrown ) {
                         console.log('fail')

                  });
            }
        });
      });

这甚至可能吗?

1 个答案:

答案 0 :(得分:2)

好的,所以你可以简单地捕获ajaxComplete事件,每当ajax被触发时触发..执行类似这样的事情:

$( document ).ajaxComplete(function( event, xhr, settings ) {
  if ( settings.url.indexOf( "nl/service/regions/" ) != '-1' ) {
     $('.checkout-shipment-methods:first-of-type').removeClass("hidden");
  }
});

这应该有用,很少探索:

  • 我们正在观看来自网页的每个ajax电话
  • 如果ajax调用的地址如下:/ regions ..
  • 如果捕获了呼叫,只需在目标elemeent上调用removeClass
欢呼,k