2015-12-01 2 views
0

Я использую JQuery плагин 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> 

В основном то, что я хочу сделать, это когда некоторые нажмите checkbox, я сделаю некоторую проверку, если условие не выполнено, я переключу флажок, чтобы установить его.

Проблема возникает после того, как проверка не удалась, флажок переключился обратно, и он снова запустил событие изменения, а затем попал в мертвый цикл, есть ли способ предотвратить запуск события изменения, если условие не выполнено? Благодарю.

+0

Просьба предоставить более подробную информацию, то есть условие, которое вы применяете. Сейчас я могу сказать вам, что вы можете использовать e.preventDefault(), чтобы остановить распространение событий. –

ответ

2

Добавить обработчик кликов к флажку, выполнить свою регистрацию и позвонить по телефону preventDefault по телефону event. Это предотвратит действие по умолчанию на флажке, который проверяет его и запускает событие изменения.

<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> 

EDIT:

Для BootstrapToggle плагин заменяет стандартный HTML флажок с некоторыми причудливыми DIV с, чтобы заставить это выглядеть красиво.

Так, чтобы сделать это, вы должны добавить обработчик щелчка на соседнем DIV с флажком, что-то вроде этого

<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=".." на input, что мы сейчас таргетирования в случае а stopImmediatePropagation(), чтобы предотвратить запуск по умолчанию события BootstrapToggle.

+0

Я попытался использовать событие click, но не стрелял, кажется, что он не распространяется на bootstrapToggle –

+0

Я обновил свой комментарий, как справиться с этим с помощью BootstrapToggle. –

+0

Да, я думаю, вы решили мою проблему, спасибо. –

Смежные вопросы