jQuery - 丢失对Ajax刷新的表单的引用

时间:2017-08-30 19:22:50

标签: javascript jquery ruby-on-rails

我有一张保存客户地址的表格。我创建了以下代码来阅读我的表单文本元素列表,并确保在我提交表单之前已经填写完所有内容。但是,当提交表单并通过Ajax重新加载表单时,jQuery将丢失引用,并且将不再遍历表单的文本元素。

$('#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(); 

1 个答案:

答案 0 :(得分:0)

存储this变量:

可以解决参考问题
var $context = this;

您可以在存储后随处使用。