如何推迟JQuery点击事件处理,直到Twitter Bootstrap处理程序运行



所以,我有一个按钮组.tl,在.tl里面我有按钮label.btn,当它被点击时,它就像一个复选框。

Bootstrap使得当复选框被选中时,label将获得active类。

所以,我想在用户单击其中一个按钮时运行一个函数,并将所有活动标签的文本放入数组中。

但是,函数总是返回最后一个click事件的结果。我尝试使用$(".tl").show().delay(100),但它仍然返回所有最后的活动项目到数组中。如何修复?

我的问题是我的脚本运行速度比bootstrap甚至放置.active

HTML:

<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});
});

最新更新