Jquery .html刷新 dom 但有时不显示在屏幕上?



i在表单上有一个文本框,其内容是由jQuery函数设置的。我在多个文本框上使用相同的功能。在某些情况下,它可以很好地工作,但似乎在第一个更新DOM上,因此当我检查它时,我可以看到文本框的内容已更改,尽管在屏幕上显示为空白?

因此,第一个实例看起来像:

<div class='form-group director1'>
   <label class='col-sm-2 control-label'>Company Address</label>
   <div class="col-sm-6"><textarea id="a1-companyaddress" class='form-control' name="a1-companyaddress" rows="5" cols="40" style="overflow-y: scroll;">&nbsp;</textarea></div>                              
</div>  

,第二个看起来像:

<div class='form-group director2'>
  <label class='col-sm-2 control-label'>Company Address</label>
  <div class="col-sm-6"><textarea id='a2-companyaddress' class='form-control' name='a2-companyaddress' rows="5" cols="40" style="overflow-y: scroll;"></textarea></div>                             
</div>

触发更新的代码是按下按钮:

$('.companysearch').click(function() {
  $('#loading').show();
  var prefix = $(this).attr('title');
  $.ajax({
    async: false,
    url: 'chouseapi.php',
    type: 'POST',
    data: {
      typ: 'fetchcompanydetails',
      company: $('#' + prefix + '-companynumber').val()
    },
    success: function(data) {
      var bits = data.split('~');
      var cno = $('#' + prefix + '-companynumber').val();
      $('#' + prefix + '-resetsearch').hide();
      $('#' + prefix + '-companyname').val('').show();
      $('#' + prefix + '-companynumberselect').hide();
      $('#' + prefix + '-companysearchbyname').show();
      $('#' + prefix + '-companyname').val(bits[0]);
      $('#' + prefix + '-companyincorporation').val(bits[1]);
      $('#' + prefix + '-companyaddress').html(bits[2]);
      $('#' + prefix + '-companysic').val(bits[3]);
      $('#' + prefix + '-companynumber').val(bits[4]);
      $('#' + prefix + '-companydata').html(bits[5]);
      $('#loading').hide();
    }
  });
});

对于A1前缀,所有输入都会更改文本框,而对于A2前缀,则很好。字段ID在页面上是唯一的。为什么会发生?

首先,从Ajax调用的设置中删除async: false。这是令人难以置信的糟糕习惯。如果您检查控制台,您甚至会看到浏览器本身告诉您不要这样做。

关于您的问题,您应该使用val()更新textarea的值,而不是html()

$('#' + prefix + '-companyaddress').text(bits[2]);

我还强烈建议您使用DOM遍历技术。这样,您可以省略HTML中不必要的增量id属性,并摆脱JS

中的丑陋'#' + prefix + '-X'串联

最新更新