Во-первых, вместо клика надо обрабатывать событие change.
Во-вторых, вместо того, чтобы каждый раз назначать обработчик всем чекбоксам, добавим делегированный обработчик контейнеру. То же, кстати, касается и удаления.
$('.add-task').click(function() {
const task = $('.input-task').val();
if (!task) {
alert('пусто');
return false;
}
$('.todos-container').append(`
<div class="todo-container">
<label>
<b class="task-text">${task}</b>
<input class="toggle-task" type="checkbox">
</label>
<button class="del-task">delete</button>
</div>
`);
$('.input-task').val('');
});
$('.todos-container')
.on('change', '.toggle-task', function() {
$(this)
.closest('.todo-container')
.find('.task-text')
.toggleClass('task-done', this.checked);
})
.on('click', '.del-task', function() {
$(this).closest('.todo-container').remove();
});
.task-done {
text-decoration: line-through;
}