【发布时间】:2018-03-13 17:22:53
【问题描述】:
我正在使用 font-awesome SVG,之前我对 scope 有一些问题,但现在我遇到了一个新问题 - 我在对另一个问题的评论中询问了这个问题,并被告知这完全是单独的问题。
这是我当前的代码:
$('body').on('click','.switchButton', function(){
$(this).attr('data-prefix', 'fas').attr('data-icon', 'spinner').addClass('fa-pulse');
$.ajax({
url: 'tasks/update_table.php',
type: 'post',
data: { "uid": $(this).attr('data-uid')},
context: this,
success: function(response) {
$(this).attr('data-icon', 'check-square').removeClass("fa-pulse");
if(response == 1) {
$(this).attr('data-prefix', 'far');
} else {
$(this).attr('data-prefix', 'fas');
}
console.log(this);
}
});
});
(注意:即使上面的 removeClass() 也没有 工作,似乎无法从成功函数内部更改元素?)
现在,当我执行console.log(this) 时,我得到了一些我觉得很奇怪的结果。
我第一次点击图标时,console.log() 我得到了这个结果:
<svg class="svg-inline--fa fa-square fa-w-14 fa-lg switchButton fa-pulse" data-uid="1" aria-hidden="true" data-prefix="fas" data-icon="check-square" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" data-fa-i2svg="">
每次之后,我总是得到这个结果:
<svg class="svg-inline--fa fa-spinner fa-w-16 fa-lg switchButton fa-pulse" data-uid="1" aria-hidden="true" data-prefix="far" data-icon="check-square" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg="">
并且图标在实际页面上永远不会改变,它只是保持作为微调器。我真的不明白这里出了什么问题。这似乎应该是一件很简单的事情,但对我不起作用。
元素最初在页面上加载为:
<i data-uid="<?=$task['uid'];?>" class="far fa-square fa-lg switchButton"></i>
而且我正在使用 font-awesome CDN 版本 v5.0.8。
我尝试了几件事,例如直接编辑属性,如您在此处看到的,我发现这是从this StackOverflow question 执行此操作的正确方法,我还尝试编辑 SVG 对象的实际类($( this) 在 context ),但这也没有效果。
当我检查对象上的元素时,chrome 告诉我代码已激活,因为元素标签有点“闪烁”,但实际上没有任何数据被更改。
出了什么问题?
【问题讨论】:
-
您的微调器永远不会消失,因为您从未告诉过它。至少在您提供的代码中。如果您 console.log() 您的响应,第一次点击时是否 == 1?
-
@RyanGibbs 我从不告诉它是什么意思?在成功函数中,它要么变为空框图标,要么变为选中框图标。微调器仅在 ajax 调用之前直接激活,成功函数内的 2 个属性代码应将其更改回常规状态。至于它== 1,这取决于。每次单击都会旋转返回值,因为它是一个布尔值。所以第一次点击可能 == 0,第二次点击 == 1,然后是 0 等等。
-
@RyanGibbs 问题是,由于某种原因,success 函数中的任何内容实际上都不会改变页面上的任何内容 - 这就是我想要弄清楚的。
-
抱歉,忽略。我误解了你对 data-icon 属性所做的事情。
-
@RyanGibbs 这一切都很好:)
标签: jquery font-awesome-5