2017-04-06 68 views
1

首先一些重要的信息。我無法更改所使用的通話,代碼,功能等任何內容。所以底線是我必須使用一種解決方法。jquery在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個呼叫 - > 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') 

        }); 
      } 
     }); 
     }); 

是,即使可能嗎?

+0

「那可能嗎?」。那麼,你寫了它......你嘗試過嗎?它有用嗎? – ADyson

+0

我理解你好嗎,你需要一種方法來改變某些元素的CSS類,在服務調用完成後,從元素中刪除'hidden'? –

+0

@ADyson:哇哈哈....是的,我試過了。以上代碼在頁面加載時隱藏元素。但是,在改變選擇後,它將刪除隱藏的類 – Meules

回答

2

OK ,,所以你可以捕捉只是ajaxComplete事件,,觸發每次AJAX是解僱..做這樣的事情:

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

,並應工作,,小EXPL:

  • 我們正在觀看來自網頁每Ajax調用
  • 如果Ajax調用是爲了解決這樣的:/地區..
  • 如果呼叫被捕獲,只需removeClass上調用目標elemeent

歡呼聲,K

+0

你救了我的人!!!真棒..... – Meules

+0

@Meules很高興工作,有一個很好的,乾杯 –