我敢肯定,很多人都使用过通过Bootstrap Collapse显示和隐藏某些内容的功能。所以我使用它,一切都成功了,但我有一些我想删除的缺点。有以下代码:
<input id="btnShowHideDeletedLft"
onclick="changeTextBtnDeletedLft()"
type="button"
class="btn btn-info"
data-toggle="collapse"
data-target="#tblDeletedLft"
value="Посмотреть удаленные" />
<div id="tblDeletedLft" class="collapse" style="margin-top: 10px;">
@* тут мой контент - небольшая таблица *@
</div>
此代码块成功完成。但是,毕竟还有JavaScript
,其中我的按钮的文本发生了变化,这里是:
function changeTextBtnDeletedLft() {
var elem = document.getElementById("btnShowHideDeletedLft");
//elem.disabled = true;
if (elem.value === 'Посмотреть удаленные') {
elem.value = 'Скрыть удаленные';
} else {
elem.value = 'Посмотреть удаленные';
}
//setTimeout(function() { elem.disabled = false; }, 500);
}
这段代码也可以,但是,唉,它不能按照我想要的方式工作,这就是问题所在,即:如果你快速双击按钮,其中的文本将改变两次,表格将是显示(隐藏)一次。结果,按钮中将进行测试Посмотреть удаленные并且表格已经显示,反之亦然,即按钮中的题词与内容之间将存在差异。
之后我想到,如果点击后按钮被禁用半秒怎么办,正好在这段时间内表格有时间显示,用户不会连续点击两次!
如果您使用中注释掉的代码JavaScript
,它将Collapse
停止工作。即不发生表格的显示和隐藏。按钮中的文本发生变化,它被禁用,但显示和隐藏不起作用。
当然,你可以在按钮上写字,Посмотреть/скрыть удаленные你不需要更改文本,这意味着不需要超时,但根据风水,你希望按钮被禁用并且其中的文本发生变化并且显示/ 隐藏内容有效。怎么做?
由于您使用的是 Bootstrap,因此您必须包含 jQuery。
当元素隐藏时,块具有类
collapsing
,通过它可以准确判断元素当前正在动画。在这种情况下,取消脚本执行:全部的:
在单击被调用函数时添加对显示/隐藏条件的检查时:
测试中的表达式总是
false
. 在调试中,可以找出collapsing
函数结束后发生了什么changeTextBtnDeletedLft()
。无法找出这种行为的原因,我不得不选择不同的解决方案,而无需验证。在 SO 上找到了这个答案:jQuery show.bs.collapse event for nested Bootstrap collapsible buttons fires on more buttons than expected related to events
Collapse
。我从这个答案中得到了解决我的问题的想法。补充修改了自身对隐藏和显示内容时发生
JavaScript
的事件的处理:Collapse
保留按钮文本更改功能不变,添加事件处理
Collapse
。这样,按钮在动画开始时被禁用,并在显示和隐藏结束后变为活动状态。我在这里找到了有关事件的所有必要的附加信息
Collapse
:Bootstrap JS Collapse。Collapse
为了回答的完整性而翻译和附加的事件信息:事件
show.bs.collapse
- 在可折叠元素即将显示时发生 - 在可折叠元素显示之前发生;shown.bs.collapse
- 当可折叠元素完全显示时发生(在 CSS 转换完成后)hide.bs.collapse
- 发生在可折叠元素即将被隐藏时 - 发生在可折叠元素被隐藏之前;hidden.bs.collapse
- 当可折叠元素完全隐藏时发生(在 CSS 转换完成后)