Bootstrap 切换手动切换事件
Bootstrap Switch manual switch event
我正在使用Bootstrap开关,需要做一个独占select:有一堆开关(数量未知),用户可以一次只转一个。
我做了这样的事情:
$('.switcher').on('switchChange.bootstrapSwitch', function() {
$(".switcher[id!='"+selected_id+"']").each(function() {
$(this).bootstrapSwitch('state', false);
});
$('#'+selected_id).bootstrapSwitch('state', current_state);
});
不幸的是,这会在无限循环中发送脚本(在状态更改时)。我认为这是因为在后台,Bootstrap Switch 使用了一个 trigger() 函数,所以当 switch 状态更改为 false 时,它会再次触发 switchChange 事件,依此类推。
我做了一个解决方法,通过触发:
$("#some-container .bootstrap-switch-container *").click(function() {
// ...
});
相反。然而,这似乎是一个非常非常糟糕的解决方案。
有没有更好的方法?
您是否考虑过使用 .off 功能?您可以删除事件处理程序(导致无限循环),更改开关的状态,然后重新附加处理程序。
运行 昨天遇到同样的问题。在 documentation 中找到了解决方案。在您的情况下,您必须将第三个参数设置为 false:
$('#'+selected_id).bootstrapSwitch('state', current_state, true);
当您不需要触发 switchChange 事件(-s) 时,必须提供此参数(名为 skip
)并将其设置为 true。
我正在使用Bootstrap开关,需要做一个独占select:有一堆开关(数量未知),用户可以一次只转一个。
我做了这样的事情:
$('.switcher').on('switchChange.bootstrapSwitch', function() {
$(".switcher[id!='"+selected_id+"']").each(function() {
$(this).bootstrapSwitch('state', false);
});
$('#'+selected_id).bootstrapSwitch('state', current_state);
});
不幸的是,这会在无限循环中发送脚本(在状态更改时)。我认为这是因为在后台,Bootstrap Switch 使用了一个 trigger() 函数,所以当 switch 状态更改为 false 时,它会再次触发 switchChange 事件,依此类推。
我做了一个解决方法,通过触发:
$("#some-container .bootstrap-switch-container *").click(function() {
// ...
});
相反。然而,这似乎是一个非常非常糟糕的解决方案。
有没有更好的方法?
您是否考虑过使用 .off 功能?您可以删除事件处理程序(导致无限循环),更改开关的状态,然后重新附加处理程序。
运行 昨天遇到同样的问题。在 documentation 中找到了解决方案。在您的情况下,您必须将第三个参数设置为 false:
$('#'+selected_id).bootstrapSwitch('state', current_state, true);
当您不需要触发 switchChange 事件(-s) 时,必须提供此参数(名为 skip
)并将其设置为 true。