jquery - Jquery .html 刷新 dom 但有时不显示在屏幕上?
问题描述
我在表单上有一个文本框,其内容由 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 在页面上是唯一的。为什么会这样?
解决方案
首先,async: false
从 AJAX 调用的设置中删除。这是非常糟糕的做法。如果您检查控制台,您甚至会看到浏览器本身告诉您不要这样做。
关于您的问题,您应该使用val()
更新的值,而textarea
不是html()
:
$('#' + prefix + '-companyaddress').text(bits[2]);
我还强烈建议您考虑使用 DOM 遍历技术。这样您就可以省略id
HTML 中不必要的增量属性,并摆脱'#' + prefix + '-X'
JS 中丑陋的串联
推荐阅读
- react-native - 世博会发布后世博会使用字体不起作用
- rxjs - 当您订阅 rxjs 时,如果测试失败,您如何向测试发出信号?
- javascript - 如何从 javascript 获取网络请求列表?
- python - 如何在 azure 中设置 Linux VM,以便我们可以将其作为服务器(不是 apache Web 服务器)进行套接字编程
- c# - 为什么向 ASP.NET Core 3.1 WEB API 或 MVC 控制器的正文中带有 JSON 参数的 Fetch Post 请求没有得到任何东西?
- node.js - 如何处理涉及打字稿的包之间的冲突?
- javascript - 如何执行在iframe中提交表单后获得的javascript
- html - 为什么固定位置的表格在滚动时会移动边框的前1px?
- javascript - 在 Select2 多选数据旁边添加额外的文本
- java - 使用 Gradle 在 WAR 之间共享依赖关系构建 EAR