Jquery 切换 Class with font awesome not refreshing
Jquery toggleClass with font awsome not refreshing
所以我有一个 Bootstrap 4 模态 table in.
<div id="modaledithistory" class="modal fade">
<div class="modal-dialog modal-lg">
<div class="modal-content px-2">
<div class="modal-header">
<button type="button" class="btn float-right" data-dismiss="modal"><i class="fas fa-times float-right"></i></button>
</div>
<div class="modal-body">
<div id="edit_history_table">
<table class="table table-bordered table-responsive-md table-striped text-center">
<thead>
<tr>
<th class="text-center px-5">Example</th>
<th class="text-center">Example</th>
<th class="text-center">Example</th>
<th class="text-center">Example</th>
<th class="text-center">Example</th>
<th class="text-center px-5">Example</th>
</tr>
</thead>
<tbody id="edit_history_table_body">
<tr class="hide">
<td class="pt-3-half" contenteditable="false">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td>
<span class="table-save">
<button type="button" class="btn btn-outline-success btn-rounded btn-sm my-0 waves-effect waves-light">
<i class="far fa-save"></i>
</button>
</span>
<span class="table-remove">
<button type="button" class="btn btn-outline-danger btn-rounded btn-sm my-0 waves-effect waves-light">
<i class="far fa-trash-alt"></i>
</button>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
第一个图标是一个保存图标,我希望它在单击时变为复选标记(永远或 5 秒或其他)。
匹配javascript是这个
const $tableID = $('#edit_history_table');
$tableID.on('click', '.table-save', function () {
// SOME OTHER CODE THAT HAS NOTHING TO DO WITH THE ICON
var btn = $(this).find("button:eq(0)");
var icon = btn.find("i:eq(0)");
console.log(btn);
console.log(icon);
//icon.toggle('1000');
$(this).find('i').toggleClass('far').toggleClass('fas').toggleClass('fa-save').toggleClass('fa-check');
//icon.toggleClass("far fa-save fas fa-check");
/*
if (icon.hasClass("fa-save")) {
icon.addClass("fas").addClass("fa-check").removeClass("far").removeClass("fa-save");
} else {
icon.addClass("far").addClass("fa-save").removeClass("fas").removeClass("fa-check");
}
*/
//btn.button("refresh");
btn.buttonMarkup('refresh');
});
我已经尝试了很多东西(在评论中留下了一些)但我无法让它正常工作。
现在它可以工作但是 buttonMarkup() 已被弃用所以我不知道为什么它实际上有效(它还会生成“Uncaught TypeError:btn.buttonMarkup 不是函数”错误)。
我什至不知道在更改 class 时我必须 'refresh' 一个按钮 UI。谁能给我指出正确的方向?
似乎没有正常(我的意思是“快速和简单”)切换图标的方法,所以...也许可以替换它?
var btn = $(this).find("button:eq(0)");
const iconToggle = () => {
const isCheckIcon = btn.find('.fa-check').length > 0;
if (isCheckIcon) {
btn.html('<i class="far fa-save"></i>')
} else {
btn.html('<i class="fas fa-check"></i>')
}
}
iconToggle();
setTimeout(iconToggle, 2000);
此处示例:jsfiddle
使用的信息:。
P.S。一些解释:此图标不受 CSS 控制,因此切换 class 是不够的。您还应该切换 'data-*' 属性...但是如果只有内部图像是静态的,但它是生成 SVG 的,则有可能...我尝试使用 classes 和数据属性有一段时间了,但是要花那么多时间
所以我有一个 Bootstrap 4 模态 table in.
<div id="modaledithistory" class="modal fade">
<div class="modal-dialog modal-lg">
<div class="modal-content px-2">
<div class="modal-header">
<button type="button" class="btn float-right" data-dismiss="modal"><i class="fas fa-times float-right"></i></button>
</div>
<div class="modal-body">
<div id="edit_history_table">
<table class="table table-bordered table-responsive-md table-striped text-center">
<thead>
<tr>
<th class="text-center px-5">Example</th>
<th class="text-center">Example</th>
<th class="text-center">Example</th>
<th class="text-center">Example</th>
<th class="text-center">Example</th>
<th class="text-center px-5">Example</th>
</tr>
</thead>
<tbody id="edit_history_table_body">
<tr class="hide">
<td class="pt-3-half" contenteditable="false">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td class="pt-3-half" contenteditable="true">Example</td>
<td>
<span class="table-save">
<button type="button" class="btn btn-outline-success btn-rounded btn-sm my-0 waves-effect waves-light">
<i class="far fa-save"></i>
</button>
</span>
<span class="table-remove">
<button type="button" class="btn btn-outline-danger btn-rounded btn-sm my-0 waves-effect waves-light">
<i class="far fa-trash-alt"></i>
</button>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
第一个图标是一个保存图标,我希望它在单击时变为复选标记(永远或 5 秒或其他)。 匹配javascript是这个
const $tableID = $('#edit_history_table');
$tableID.on('click', '.table-save', function () {
// SOME OTHER CODE THAT HAS NOTHING TO DO WITH THE ICON
var btn = $(this).find("button:eq(0)");
var icon = btn.find("i:eq(0)");
console.log(btn);
console.log(icon);
//icon.toggle('1000');
$(this).find('i').toggleClass('far').toggleClass('fas').toggleClass('fa-save').toggleClass('fa-check');
//icon.toggleClass("far fa-save fas fa-check");
/*
if (icon.hasClass("fa-save")) {
icon.addClass("fas").addClass("fa-check").removeClass("far").removeClass("fa-save");
} else {
icon.addClass("far").addClass("fa-save").removeClass("fas").removeClass("fa-check");
}
*/
//btn.button("refresh");
btn.buttonMarkup('refresh');
});
我已经尝试了很多东西(在评论中留下了一些)但我无法让它正常工作。 现在它可以工作但是 buttonMarkup() 已被弃用所以我不知道为什么它实际上有效(它还会生成“Uncaught TypeError:btn.buttonMarkup 不是函数”错误)。
我什至不知道在更改 class 时我必须 'refresh' 一个按钮 UI。谁能给我指出正确的方向?
似乎没有正常(我的意思是“快速和简单”)切换图标的方法,所以...也许可以替换它?
var btn = $(this).find("button:eq(0)");
const iconToggle = () => {
const isCheckIcon = btn.find('.fa-check').length > 0;
if (isCheckIcon) {
btn.html('<i class="far fa-save"></i>')
} else {
btn.html('<i class="fas fa-check"></i>')
}
}
iconToggle();
setTimeout(iconToggle, 2000);
此处示例:jsfiddle
使用的信息:
P.S。一些解释:此图标不受 CSS 控制,因此切换 class 是不够的。您还应该切换 'data-*' 属性...但是如果只有内部图像是静态的,但它是生成 SVG 的,则有可能...我尝试使用 classes 和数据属性有一段时间了,但是要花那么多时间