Причина номер раз: потому что автор кода говнокодер. Ну, то есть - вы даже отформатировать код не удосужились. Причина номер два: проверяется состояние только одного инпута, того, где случилось событие. А надо проверять все.
Исправляем:
$('form').on('input', function() {
$('.button').prop('disabled', $('input', this).get().some(n => !n.value));
}).trigger('input');
Или, к чёрту jquery:
const form = document.querySelector('form');
const button = document.querySelector('.button');
// можно по-прежнему самостоятельно проверять значения input'ов
const inputs = [...form.querySelectorAll('input')];
const onInput = () => button.disabled = !inputs.every(n => n.value);
form.addEventListener('input', onInput);
onInput();
// но если добавить input'ам атрибут required...
form.addEventListener('input', function() {
button.toggleAttribute('disabled', !this.checkValidity());
});
form.dispatchEvent(new Event('input'));