【问题标题】:Bootstrap Switch manual switch eventBootstrap Switch 手动切换事件
【发布时间】:2015-06-03 14:35:44
【问题描述】:

我用的是Bootstrap Switch,需要做一个独选:有一堆switcher(数量不详),用户一次只能转一个。

我做了这样的事情:

$('.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() {
    // ...
});

相反。但是,这似乎是一个非常糟糕的解决方案。

有没有更好的办法?

【问题讨论】:

  • HTML 与这个问题并不真正相关,Bootstrap Switch 无论如何都会完全改变它。您从一个复选框开始,例如 ,然后执行 $('input[type="checkbox"]').bootstrapSwitch();它在复选框顶部添加了一些 div。
  • HTML 总是相关的,它可以帮助我们重现您的问题。

标签: jquery bootstrap-switch


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您是否考虑过使用.off 函数?您可以删除事件处理程序(导致无限循环),更改开关的状态,然后重新附加处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多