Javascript jquery toggleClass不处理img元素

Javascript jquery toggleClass不处理img元素,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有两个按钮(“批准”、“取消批准”)和一个加载微调器的图像。默认情况下,将显示“批准”按钮,而“取消批准”按钮和“加载微调器”图像将隐藏 单击“批准”按钮时,我希望它消失,显示加载微调器,然后执行ajax请求。请求完成后,我希望加载微调器图像再次隐藏。如果ajax请求成功,我希望显示“Unapprove”按钮。如果ajax请求失败,我希望再次显示“批准”按钮 我遇到的问题是,在完成ajax请求后,我的.always()方法会运行,但微调器图像不会隐藏。以下是一个例子: 如果我更改ajax请求

我有两个按钮(“批准”、“取消批准”)和一个加载微调器的图像。默认情况下,将显示“批准”按钮,而“取消批准”按钮和“加载微调器”图像将隐藏

单击“批准”按钮时,我希望它消失,显示加载微调器,然后执行ajax请求。请求完成后,我希望加载微调器图像再次隐藏。如果ajax请求成功,我希望显示“Unapprove”按钮。如果ajax请求失败,我希望再次显示“批准”按钮

我遇到的问题是,在完成ajax请求后,我的.always()方法会运行,但微调器图像不会隐藏。以下是一个例子:

如果我更改ajax请求的url以给出404 not found错误,则此过程的工作原理与预期的一样:

有人知道为什么在我的第一个例子中,
spinner.toggleClass(“hide”)命令没有在always()函数中运行?谢谢

更新: 我发现一件有趣的事情是,如果我在.always()函数中重新定义微调器变量,它会在成功的ajax请求中正常工作:


但是,如果修改ajax url以接收404,同样的微调器不消失的问题会再次发生。

在您总是想要添加类的上下文中,请使用
addClass
,而不是
toggleClass
。在代码中,该类被切换两次:一次在“始终”中,然后再次在“失败”中。因此,它最终的状态与以前相同

您两次瞄准图像的原因是,您定义的otherButton如下所示:

var otherButton = currentButton.siblings();
当您想做的是:

var otherButton = currentButton.siblings('button');

toggleClass
在您可能需要根据某些条件添加或删除类时最有用。

始终要添加类的上下文中,请使用
addClass
,而不是
toggleClass
。在代码中,该类被切换两次:一次在“始终”中,然后再次在“失败”中。因此,它最终的状态与以前相同

您两次瞄准图像的原因是,您定义的otherButton如下所示:

var otherButton = currentButton.siblings();
当您想做的是:

var otherButton = currentButton.siblings('button');

toggleClass
在您可能希望根据某些条件添加或删除类时最有用。

在代码中,您在图像上两次切换
隐藏
类,分别在
始终()
回调和
完成()/fail()
回调中

这是因为您在两个变量中都以图像为目标,
微调器
&
其他按钮

您应该定义
otherbutton
,如下所示:

var otherButton = currentButton.siblings("button");
不包括匹配集中的图像


作为补充说明,为了代码的可读性,您应该使用
addClass()/removeClass()
,而不是像Kweis的答案中所说的那样,设置所有的逻辑,只在
always()
回调中显示/取消显示元素。

在代码中,您在
always()中两次切换图像上的
hide
callback和
done()/fail()
one

这是因为您在两个变量中都以图像为目标,
微调器
&
其他按钮

您应该定义
otherbutton
,如下所示:

var otherButton = currentButton.siblings("button");
不包括匹配集中的图像


作为旁注,为了代码的可读性,您应该使用
addClass()/removeClass()
,而不是像KWEIS答案中所说的那样,设置所有逻辑,仅在
始终()
回调中显示/取消显示元素。

完成后,您将在图像上重新记录隐藏类,您应该使用:
var otherButton=currentButton.sides(“按钮”)
和您的更新JSFIDLE是错误的,在always callback中,
这个
不是指单击的元素,而是指jqXHR选项。所以事实上,您并没有在always回调中切换image类,只是在donePlease post代码中。如果JSFiddle决定打包,你的问题对来的人来说毫无价值after@A.Wolff您发现了正确的问题,注意到我调用的是sides()而不是sides(“按钮”)。如果你想回答,我可以把你的标记为正确。非常感谢。在“完成”中,如果要重新记录图像上的隐藏类,则应使用:
var otherButton=currentButton.sibbins(“按钮”)
和您的更新JSFIDLE是错误的,在always callback中,
这个
不是指单击的元素,而是指jqXHR选项。所以事实上,您并没有在always回调中切换image类,只是在donePlease post代码中。如果JSFiddle决定打包,你的问题对来的人来说毫无价值after@A.Wolff您发现了正确的问题,注意到我调用的是sides()而不是sides(“按钮”)。如果你想回答,我可以把你的标记为正确。非常感谢。在这三个位置中,没有切换同一元素。微调器在always()中切换,currentButton和otherButton分别在fail()和done()中切换。如果这是最佳实践,我可以使用addClass/removeClass。但这样做并不能解决我的问题。同一个元素并没有在所有三个位置都被切换。微调器在always()中切换,currentButton和otherButton分别在fail()和done()中切换。如果这是最佳实践,我可以使用addClass/removeClass。但这样做并不能解决我的问题。