2017-08-30 51 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调用用法的一个片段来做一个更直接的例子(你可以改变数据,我只需要丢失上下文) –