В идеале должна быть возможность нажать на кнопку
Скачать даже в случае, если форма невалидна, только перед отправкой нужно делать проверку данных и показывать соответсвующие ошибки под инпутами.
Если же ты все-таки не хочешь, чтобы кнопка работала до тех пор, пока пользователь не введет правильные данные, используй атрибут
disabled
- при изменении значения инпута проверяй его валидность, и если всё окей - убирай
disabled
с кнопки, иначе - оставляй.
Вот тут можно посмотреть, как делается валидация форм на чистом JS.
UPD: вот так это может работать на твоём конкретном примере. Валидация осуществляется только средствами HTML. Обрати внимание, что я добавил атрибут
pattern
для инпута: так ты сможешь проверять не только наличие значения в поле, но и соответствие его какому-либо формату(сейчас там просто равенство 1234).