function chk() {
var a = $('#chkAll').prop('checked');
if (a == true)
$('.hobbie').attr('checked', 'checked');
else
$('.hobbie').removeAttr('checked');
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Select All <input onclick = "chk()" type = "checkbox" id = "chkAll">
<br>
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">Если я щелкнул флажок `` Выбрать все '', он установит все флажки, и если я снова нажму, он снял все флажки, но после этого он не работает, пока я не обновлю страницу.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


попробуйте простой код:
$("#chkAll").click(function () {
$(".hobbie").attr('checked', this.checked);
//or
$(".hobbie").prop('checked', true);
});
как снова снять отметку
$ (". хобби"). prop ('проверено', ложь);
Нет необходимости проверять состояние. Кратчайший способ сделать это.
function chk() {
$('#chkAll').on('change', function() {
$('.hobbie:checkbox').prop('checked', $(this).is(":checked"));
});
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input onclick = "chk()" type = "checkbox" id = "chkAll">
<br>
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">У него уже есть onClick, тогда вы использовали функцию change, поэтому здесь нет необходимости использовать двойную функцию.
Я согласен с @Pedram, нет необходимости использовать 2 таких события.
Используйте этот код:
function chk(obj) {
$('.hobbie').prop('checked', $(obj).prop('checked'));
}
демонстрация
function chk(obj) {
$('.hobbie').prop('checked', $(obj).prop('checked'));
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Select All <input onclick = "chk(this)" type = "checkbox" id = "chkAll">
<br>
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">Это лучший подход.
Один лайнер function
function chk(isChecked) {
$('.hobbie').prop('checked', isChecked);
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Select All <input onclick = "chk(this.checked)" type = "checkbox" id = "chkAll">
<br>
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
<input type = "checkbox" class = "hobbie">
вы удаляете атрибут, отмеченный в состоянии else, поэтому он не сработает второй раз. просто переключите true / false. функция chk () {var a = $ ('# chkAll'). prop ('проверено'); if (a == true) $ ('. hobbie'). attr ('проверено', 'true'); else $ ('. hobbie'). attr ('проверено', 'ложь); }}