0

我有一个 HTML 表单,我根据用户采取的某些操作在 DOM 中上下移动,因此地址表单被加载到一个变量中,以便稍后重新注入到 DOM 中。

/* Load the address form into a variable to be re-injected into the dom later */
var address_form = $('#address_temp').html();
$('#address_temp').remove();

再往下,我进行了 AJAX 调用,并根据我希望用值填充表单字段的响应。因此,表单中有一个地址 1、地址 2 和邮政编码,我想做类似的事情:

$.ajax({
   url: "/qualify/",
   dataType: "json",
   data: {
      ajax : 'true',
      lookup : 'true',
      postcode : $('#avail_input').val()                
   },
   success: function(data) {    
      $('#address1').val(data.street);          
      $('#address2').val(data.city);
      $('#postcode').val(data.postcode);
}});

但是,这不起作用,因为地址已经加载到 DOM 中并且副本已放置在变量中。如何替换表单字段的值?我是否需要将其重新加载回 DOM 以再次操作它?

4

2 回答 2

1

不要将表单保存为 html 字符串,而是将 dom 本身复制为 jquery 对象:

/* Load the address form into a variable to be re-injected into the dom later */
var address_form = $('#address_temp').clone(true);
$('#address_temp').remove();

然后,即使它不在文档的 dom 中,您也可以操作表单的 dom:

success: function(data) {    
      $('#address1', address_form).val(data.street);          
      $('#address2', address_form).val(data.city);
      $('#postcode', address_form).val(data.postcode);
}

我正在做的是在address_form.

附言

在我看来,一个更干净的等价物会改变,但这主要是一个品味问题:)

success: function(data) {
    address_form
        .find('#address1').val(data.street).end()
        .find('#address2').val(data.city).end()
        .find('#postcode').val(data.postcode);
}

您可能想了解 jQuery 的clone()方法。

于 2012-11-09T11:52:49.447 回答
0

在成功处理程序中,您将不得不操纵address_form变量。我相信这可以这样做:

  success: function(data) {    
        address_form.find('#address1').val(data.street);          
        address_form.find('#address2').val(data.city);
        address_form.find('#postcode').val(data.postcode);
  }
于 2012-11-09T11:48:27.357 回答