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;"> </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'
串联