【发布时间】:2022-11-17 17:17:07
【问题描述】:
我有几个输入字段,允许我添加或更新添加到购物车的产品的折扣:
<div class="bsk-dto">
<input type="text" name="dtoupdate[3][Normal][Normal][Normal][1][%]" value="3" class="dto" autocomplete="off" data-validation="number" data-validation-allowing="float">
</div>
<div class="bsk-dto">
<input type="text" name="dtoupdate[6][Normal][Normal][Normal][1][%]" value="1" class="dto" autocomplete="off" data-validation="number" data-validation-allowing="float">
</div>
<div class="bsk-dto">
<input type="text" name="dtoupdate[10][Normal][Normal][Normal][1][%]" value="0" class="dto" autocomplete="off" data-validation="number" data-validation-allowing="float">
</div>
此数据是根据添加到购物车的项目生成的:
我在我的 ajax 代码中添加了 $this 属性,这样当其中一些被修改时,它只会更新正在修改的输入字段,但不幸的是它对我不起作用,如果我修改其中一个输入字段,所有其中有修改。
$(function() {
$(document).on('input', '.dto', function(e){
e.preventDefault();
$this = $(this);
var formData = [];
$('input[name^="dtoupdate"]').each(function() {
formData.push(this.value);
});
var formData = $(this).serializeArray();
var url = "update_cart.ini.php";
$.ajax({
url: url,
type: "POST",
data: formData,
cache: false,
})
.done(function(data) {
let res = JSON.parse(data);
if(res.status){
$('.alert-success').fadeIn();
$('.alert-success').html(res.message).delay(2000).fadeOut(2000);
} else {
$('.alert-danger').fadeIn();
$('.alert-danger').html(res.message).delay(2000).fadeOut(2000);
}
})
.fail(function( jqXHR, textStatus ) {
/*alert("Ajax Request fail");
console.log(jqXHR.responseText);
console.log("Request failed: " + textStatus );*/
})
});
});
我应该做哪些更改,以便它只更新正在修改的输入中的数据?
【问题讨论】:
-
你尝试过什么来解决这个问题?你卡在哪儿了?您是否检查过是否仅使用这些 ID 发送了请求?
-
@NicoHaase 如果发送了朋友,问题是它发送的是所有输入,而不是我正在修改的特定输入
-
您用完整的表单覆盖 formData(不是 FormData 对象)。你可能想要
const arrayOfValues = $('input[name^="dtoupdate"]').map(function() { return this.value }).get(); -
@mplungjan 我必须消除所有
formData,ajax朋友的data: formData,会怎样?