Обрезайте пробельные символы по краям при получении значения из input'а - так, если ничего больше нет, строка получится пустой и проверка пройдена не будет.
Ну и ещё повторяющийся код неплохо было бы вынести в отдельный метод, и избавиться от повторного поиска элементов:
$('button').on('click', addTodo);
const $input = $('.form-control').keypress(e => {
if (e.key === 'Enter') {
addTodo();
}
});
const $ul = $('ul')
.on('click', '.remove', function() {
const $li = $(this).closest('li').fadeOut(500, () => $li.remove());
})
.on('click', '.checkbox', function() {
$(this).closest('li').find('.text').toggleClass('line').fadeIn(100);
})
.on('mouseenter mouseout', '.text', function({ type }) {
$(this).attr('contenteditable', () => type === 'mouseenter' ? true : null);
});
function addTodo() {
const text = $input.val().trim();
if (text) {
$input.val('');
$ul.append(`
<li>
<input type="checkbox" class="checkbox">
<span class="text">${text}</span>
<span class="remove">✘</span>
</li>
`);
}
}