我有两个按钮("批准","未批准")和一个加载微调器的图像。默认情况下,将显示“批准”按钮,并隐藏“取消批准”按钮和加载微调器图像。
当"批准"单击按钮我希望它消失,显示加载微调器,然后执行ajax请求。完成请求后,我希望加载微调器图像再次隐藏。如果ajax请求成功,我想要" Unapprove"按钮显示。如果ajax请求失败,我想要"批准"按钮再次显示。
我遇到的问题是,在完成ajax请求后,我的.always()方法会运行,但微调器图像不会被隐藏。这是一个例子:
https://jsfiddle.net/ebme6fjs/7/
如果我更改了我的ajax请求的url给我一个404 not found错误,那么这个过程就像它应该的那样:
https://jsfiddle.net/ebme6fjs/8/
有人知道为什么在我的第一种情况下spinner.toggleClass("hide");
命令不在always()函数中运行吗?感谢。
更新: 我发现一个有趣的事情是,如果我在.always()函数中重新定义我的微调器变量,它可以在成功的ajax请求上正常工作:
https://jsfiddle.net/ebme6fjs/9/
如果您修改ajax网址以接收404,则同样会发生微调器不会消失的问题。
答案 0 :(得分:2)
在始终想要添加课程的情况下,请使用addClass
,而不是toggleClass
。在您的代码中,该类被切换两次:一次进入"始终"然后再次"失败"。所以它最终处于和以前一样的状态。
您将图片定位两次的原因是因为您正在定义otherButton,如下所示:
var otherButton = currentButton.siblings();
当你想要做的是:
var otherButton = currentButton.siblings('button');
toggleClass
在您根据某些条件添加或删除该类时非常有用。
答案 1 :(得分:1)
在您的代码中,您在hide
回调和always()
的图片中两次切换done()/fail()
课程。
这是因为您定位了两个变量中的图片spinner
& otherbutton
。
您应该将otherbutton
定义如下:
var otherButton = currentButton.siblings("button");
不包括匹配集中的图像。
作为旁注,为了代码可读性,您应该使用addClass()/removeClass()
而不是KWeiss的答案和btw,只在always()
回调中设置显示/不显示元素的所有逻辑。