我在一个页面上有多个按钮。点击后,我跟踪按钮ID,发送按钮值到后端php代码,通过更改数据库返回更新的值。除了这个,我能够得到我需要的一切:成功时设置按钮值!这是我正在使用的代码:
$(document).ready(function(){
$("input[type='button']").click(function(){
var selected = $(this).attr("id");
var val = prompt("Enter new value",0);
$.ajax({
url:'updateCostItems.php',
data:{toupdate:selected, updatewith:val},
type:'GET',
dataType:'json',
success:function(json){
$(this).val(json.update);
},
error:function(xhr, status){
alert("Problem");
},
complete:function(xhr, status){
}
});
});
});
答案 0 :(得分:4)
我认为this
不正确,因为回调是在全局范围内运行的。
未经测试,但请在$.ajax
之前尝试编写var $this = $(this)
,然后在回调中使用$this.val(json.update)
修改:更新了代码段,通过使用var声明来确保本地$this
。其他帖子建议使用var button = $(this)
,这在更大的项目中可能会更好,因为跟踪变量更具挑战性 - 但所有答案都是相同的。
答案 1 :(得分:1)
问题是,在ajax请求中,'this'指向xhr对象,而不是按钮。您应该在拨打电话之前存储对按钮的引用,例如var button = $(this);
以及稍后更新button.val(json.update);
答案 2 :(得分:1)
将按钮存储在外部循环的局部变量中,然后在成功处理程序的内部范围内引用该变量:
$(document).ready(function(){
$("input[type='button']").click(function(){
var $btn = $(this)
var selected = $btn.attr("id");
var val = prompt("Enter new value",0);
$.ajax({
url:'updateCostItems.php',
data:{toupdate:selected, updatewith:val},
type:'GET',
dataType:'json',
success:function(json){
$btn.val(json.update);
},
error:function(xhr, status){
alert("Problem");
},
});
});
});
答案 3 :(得分:0)
$(this)在调用成功函数时不会引用按钮。您需要将按钮(或按钮的id)作为参数传递给回调。存储单个全局变量是不够的,因为在第一个ajax调用返回之前,您可能会单击第二个按钮。