Jquery 引导开关手动开关事件

Jquery 引导开关手动开关事件,jquery,bootstrap-switch,Jquery,Bootstrap Switch,我使用的是引导开关,需要做一个独占选择:有一堆开关(数量未知),用户可以一次只打开一个 我是这样做的: $('.switcher').on('switchChange.bootstrapSwitch', function() { $(".switcher[id!='"+selected_id+"']").each(function() { $(this).bootstrapSwitch('state', false); }); $('#'+selected

我使用的是引导开关,需要做一个独占选择:有一堆开关(数量未知),用户可以一次只打开一个

我是这样做的:

$('.switcher').on('switchChange.bootstrapSwitch', function() {
    $(".switcher[id!='"+selected_id+"']").each(function() {
        $(this).bootstrapSwitch('state', false);
    });
    $('#'+selected_id).bootstrapSwitch('state', current_state);
});
不幸的是,这会在无限循环中发送脚本(在状态更改时)。我认为这是因为在引擎盖下,引导开关使用一个trigger()函数,所以当开关状态更改为false时,它会再次触发switchChange事件,以此类推

我做了一个变通办法,通过触发:

$("#some-container .bootstrap-switch-container *").click(function() {
    // ...
});
相反。然而,这似乎是一个非常糟糕的解决方案


有更好的方法吗?

您考虑过使用该功能吗?您可以删除事件处理程序(导致无限循环),更改开关的状态,然后重新连接处理程序。

昨天遇到同样的问题。在中找到了解决方案。在您的情况下,必须将第三个参数设置为false:

$('#'+selected_id).bootstrapSwitch('state', current_state, true);

当您不需要触发switchChange事件(-s)时,必须提供此参数(名为
skip
),并将其设置为true。

HTML与此问题并不相关,但引导开关会完全改变它。您可以从一个复选框开始,比如,然后执行$('input[type=“checkbox”]”);它在checkbox的顶部添加了一些div。HTML总是相关的,它帮助我们重新创建您的问题。