2015-12-01 162 views
0

我使用jQuery在我的web应用程序插件bootstrapToggle,并在这里遇到的一个问题,我的代码是像下面BootstrapToggle如何防止更改事件

<input id="toggle-event" type="checkbox" data-toggle="toggle"> 
<script> 
    $(function() { 
    $('#toggle-event').change(function() { 
     if (some condition) { 
       $('#console-event').bootstrapToggle('toggle'); 
     } 
    }) 
    }) 
</script> 

基本上就是我想要做的是当一些点击复选框,我会做一些检查,如果条件失败,我会切换复选框将其设置回来。

这里的问题是检查失败后,复选框切换回来,它再次触发更改事件,然后陷入死循环,有没有办法来防止发生变化事件,如果条件失败?谢谢。

+0

请提供一些更多细节,即您正在申请的条件。现在我可以告诉你,你可以使用e.preventDefault()来停止事件传播。 –

回答

2

在复选框中添加点击处理程序,在那里检查并在event上致电preventDefault。这将防止检查它并触发更改事件的复选框发生的默认操作。

<input id="toggle-event" type="checkbox" data-toggle="toggle"> 
<script> 
    $(function() { 
    $('#toggle-event').on("click", function(e) { 
     if (some condition) { 
      e.preventDefault(); 
     } 
    }).change(function() { 
     $('#console-event').bootstrapToggle('toggle'); 
    }) 
</script> 

编辑:

对于BootstrapToggle插件将其与一些花哨DIV小号取代了标准的HTML复选框,使它看起来很漂亮。

因此,要做到这一点,你需要在相邻DIVinput我们现在在事件目标和添加点击处理程序的复选框,这样的事情

<input id="toggle-event" type="checkbox" data-toggle="toggle" data-style="testtoggle"> 
$(document).on('click.bs.toggle', 'div.testtoggle', function(e) { 
    e.stopImmediatePropagation() 
    var $checkbox = $(this).sibling('input[type=checkbox]') 
    if (some condition) { 
      $checkbox.bootstrapToggle('toggle') 
    } 
}) 

注意data-style=".."属性stopImmediatePropagation()以防止引发BootstrapToggle默认事件。

+0

我试图使用点击事件,但没有发射,似乎它没有传播到bootstrapToggle –

+0

我已经更新了我的评论以及如何使用BootstrapToggle处理此问题。 –

+0

是的,我想你解决了我的问题,谢谢。 –