所以,我有一个按钮组.tl
,在.tl
里面我有按钮label.btn
,当它被点击时,它就像一个复选框。
Bootstrap使得当复选框被选中时,label
将获得active
类。
所以,我想在用户单击其中一个按钮时运行一个函数,并将所有活动标签的文本放入数组中。
但是,函数总是返回最后一个click
事件的结果。我尝试使用$(".tl").show().delay(100)
,但它仍然返回所有最后的活动项目到数组中。如何修复?
我的问题是我的脚本运行速度比bootstrap甚至放置.active
类
<div class="btn-group tl">
<label class="btn active">
<input type="checkbox" checked> Option 1 Checked
</label>
<label class="btn">
<input type="checkbox"> Option 2 Unchecked
</label>
</div>
JS:
$(".tl").click(function() {
var returningArray = [];
$(".tl label.active").each(function () {
returningArray.push($(this).find("span").text());
});
});
例子:
Action(No.) || initial | 1* | 2 | 3^ |
------------++---------+-------+-------+-------+
Active Label|| 1 2 3 | 2 3 | 3 | 1 3 |
------------++---------+-------+-------+-------+
Array+ || X | 1 2 3 | 2 3 | 3 |
*Clicked button(checkbox) 1 to disable
^Clicked button(checkbox) 1 to enable
+Always returning previous result
注:附带问题:$(".tl label").click(function() {
也没有工作,如何更精确?
注:2:另外,我不一定需要解决上面的问题,可以建议任何其他方法来实现我的目标
问题就像你怀疑的那样,bootstrap方法是在你的脚本之后执行的…
一个混乱的解决方案是将处理程序绑定到文档对象,以便您的处理程序将在引导后执行。
$(document).on('click', ".tl", function() {
var returningArray = [];
$(".tl label.active").each(function () {
returningArray.push($(this).find("span").text());
});
});
对不起,不得不回答我自己的问题,引导代码确实比我的慢。
但是任何人都可以回答一个更好的,因为我认为setTimeout
不够好。
出租汽车司机解决办法:
$(".tl").click(function() { setTimeout(function() {
var returningArray = [];
$(".tl label.active").each(function () {
returningArray.push($(this).find("span").text());
}), 100});
});