我在表单上有一个字段,当它填满时会调用ajax调用。
ajax调用填写表单的其他字段和所有内容。
但我在他们的领域有一些功能,他们只在点击这些字段后才能工作..
$('#lista').on('keypress keydown keyup change',function(){
var qtd_itens = $('#lista tbody').children('tr').length + 1;
somatotal = 0;
for ($i = 0; $i < qtd_itens; $i++) {
acho = new String($(':input[name="qtd' + $i + '"]').val()),
alto = new String($(':input[name="preco' + $i + '"]').val());
acho = acho.replace(',', '.');
alto = alto.replace('.', '');
alto = alto.replace(',', '.');
v = 0;
if (!isNaN(acho) && !isNaN(alto)){
v = parseFloat(acho*alto,2);
}
$(':input[name="total' + $i + '"]').val(formatter.format(v));
somatotal += v;
$(':input[name="valortotal"]').val(formatter.format(somatotal));
}
});
我知道这种情况正在发生,因为我正在使用on('keypress keydown keyup change'事件。但是,有没有一种方法,当调用ajax调用时,这已经完成了工作而没有我点击字段?
答案 0 :(得分:0)
以编程方式更改字段时,不会触发更改事件。如果您希望在以编程方式填充ajax调用中的字段后运行代码,则必须将代码放入函数中,并在从ajax调用中将新数据放入其中之后在这些字段上调用它。 / p>
例如,您可以将代码更改为:
$('#lista').on('keypress keydown keyup change', itemsModified);
function itemsModified(){
var qtd_itens = $('#lista tbody').children('tr').length + 1;
somatotal = 0;
for ($i = 0; $i < qtd_itens; $i++) {
acho = new String($(':input[name="qtd' + $i + '"]').val()),
alto = new String($(':input[name="preco' + $i + '"]').val());
acho = acho.replace(',', '.');
alto = alto.replace('.', '');
alto = alto.replace(',', '.');
v = 0;
if (!isNaN(acho) && !isNaN(alto)){
v = parseFloat(acho*alto,2);
}
$(':input[name="total' + $i + '"]').val(formatter.format(v));
somatotal += v;
$(':input[name="valortotal"]').val(formatter.format(somatotal));
}
)
然后,在AJAX调用填充字段后手动调用itemsModified()
。
我自己没有尝试过,但您也可以按照原来的方式保留代码,并在ajax调用填写新值后调用:
$('#lista').trigger("change");
这将手动触发更改事件并使您的更改处理程序执行格式化。