2015-01-20 4 views
0

Я пытаюсь использовать промежуток, нажав, переключать его классы между .btn-warning и .btn-primary. Однако мой код работает только для первого щелчка. После этого каждый клик не работает.Обработчик события JQuery не сбрасывается после смены класса

JavaScript

$(document).ready(function(){ 

    $('.btn-warning').on('click',function(){ 
     $(this).removeClass('btn-warning').addClass('btn-primary'); 
    }); 
    $('.btn-primary').on('click',function(){ 
     $(this).removeClass('btn-primary').addClass('btn-warning'); 
    }); 
}); 

HTML

<span class="btn btn-warning" >Click me</span> 
+0

изменить обработчик событий для этого $ (документ) .on ('щелчок', '.btn-предупреждение', function() {// ваш код}); – murnax

ответ

0

Вы должны использовать event delegation метод, потому что вы связываете событие динамически добавленный класс элемент:

$(document).ready(function(){ 

    $(document).on('click','.btn-warning',function(){ 
     $(this).removeClass('btn-warning').addClass('btn-primary'); 
    }); 
    $(document).on('click','.btn-primary',function(){ 
     $(this).removeClass('btn-primary').addClass('btn-warning'); 
    }); 
}); 

Просто вы можете сделать так:

$(document).on("click",".btn", function() { 
    $(this).toggleClass('btn-warning btn-primary'); 
}); 
1

Изменение класса не волшебно добавить события, которые ранее были добавлены. Вам нужно снова или снова отключить/связать события или использовать общий обработчик onclick, который знает, как с ним обращаться, или использовать делегирование событий.

Все, что код может быть уменьшен до:

$(".btn").on("click", function() { 
 
    $(this).toggleClass('btn-warning').toggleClass('btn-primary'); 
 
});
.btn-primary { background-color: blue; } 
 
.btn-warning { background-color: yellow; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<span class="btn btn-warning" >Click me</span>

+0

Вам не нужно «toggleClass» дважды. – royhowie

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