2017-08-30 33 views
1

我有一個保存客戶地址的表單。我創建了以下代碼來閱讀我的表單文本元素列表,並確保在我提交表單之前全部填寫了它們。但是,當表單被提交併且表單通過Ajax重新加載時,jQuery將失去引用並且不再遍歷表單的文本元素。jQuery - 失去對由Ajax刷新的表單的引用

$('#cart-addresses :text').each(function(){ 

     if(sAB == true){ 
      if(this.id.includes("_0_") && this.id != "cart_cart_addresses_attributes_0_address_line_two" && this.value == ""){ 
       ready = false; 
      } 
     }else{ 
      if(this.id != "cart_cart_addresses_attributes_0_address_line_two" && this.id != "cart_cart_addresses_attributes_1_address_line_two" && this.value == ""){ 
       ready = false; 
      } 
     } 
    }); 

對於我通過Ajax調用加載的其他元素,我使用類似這樣的工作方式。

$("#cart-addresses input[type=text]").on('keyup',function(e){ myHandler(e); }); 

但是,我不知道如何對窗體執行相同類型的操作,以便Ajax調用不會導致引用丟失。

Ajax調用接收到以下javascript的響應。

$("#address-content").html(""); 
$("<%= escape_javascript(render :partial => "addresses", :locals => { cart: @cart, countries: @countries}) %>").appendTo("#address-content"); 

$("#shipping-methods").html(""); 
$("<%= escape_javascript(render :partial => "shipping_methods", :locals => { cart: @cart}) %>").appendTo("#shipping-methods"); 


$("#order-details").html(""); 
$("<%= escape_javascript(render :partial => "order_details", :locals => { cart_items: @cart_items, totals: @totals}) %>").appendTo("#order-details"); 

setStates(0); 
setStates(1); 

isShippingEqaulToBilling(); 
+0

顯示ajax的「成功」塊 – Amogh

+1

*「當表單提交併且表單通過Ajax重新加載時,」* - 爲什麼要替換整個表單?你不能讀回這些信息並把它放在現有的表格中嗎? – GolezTrol

+0

@GolezTrol我正在使用Ruby on Rails,並且如果您在該莊園中呈現表單,Rails將自動生成帶有錯誤的字段。 –

回答

0

參考問題可以解決存儲this變量:

var $context = this; 

您可以將其存儲後在任何地方使用。

+0

請詳細說明。 –

+0

我需要你的ajax調用用法的一個片段來做一個更直接的例子(你可以改變數據,我只需要丟失上下文) –