Prohlížeče nevyvolávají žádné události (input, change, keyup…), když automaticky doplní uložené přihlašovací údaje. Proto se tvoje funkce updateLoginButtonState() nespustí.
Nejjednodušší a spolehlivé řešení je spustit kontrolu po načtení stránky pomocí requestAnimationFrame() nebo setTimeout(), protože autofill proběhne až po vykreslení DOMu.
Zkus například: document.addEventListener("DOMContentLoaded", () => {
// Počkej, až prohlížeč doplní autofill
requestAnimationFrame(() => {
requestAnimationFrame(() => {
updateLoginButtonState();
});
});
});
Nebo jednoduše:
window.addEventListener("load", () => {
updateLoginButtonState();
});
Událost load se spouští později než DOMContentLoaded, takže už většinou obsahuje autofill hodnoty.
Pokud používáš <input autocomplete="on">, můžeš také poslouchat událost:
usernameInput.addEventListener("change", updateLoginButtonState);
passwordInput.addEventListener("change", updateLoginButtonState);
Ale nejspolehlivější je opravdu kontrola po load.