Попробуйте поместить document.getElementById
в setTimeout()
Например.
setTimeout(function(){
console.log(document.getElementById('whatever'));
}, 100);
Если это сработает, тогда это просто проблема синхронизации.
onclick кнопки должен (я думать), только стреляют, если кнопка на самом деле нажата (или когда фокус находится на нем, и пользовательские щелчки входят), если Вы не добавили логику для изменения этого.
Добавление дополнительного текстового поля возможно изменяющий порядок вкладки Ваших элементов (возможно, делающий кнопку управление по умолчанию в этом случае)?
Если Вы хотите, чтобы код работал, когда пользователь нажимает Enter, просто используйте onSubmit обработчик.
Если Вы хотите, чтобы код работал, когда пользователь нажимает кнопку, и не, когда пользователь нажимает Enter, используйте кнопку кроме типа =, "отправляют".
Интересно при нажатии на экран (удалите фокус из текстового поля) на втором примере только с одним текстовым полем, событие onClick огни... Таким образом, это не ожидаемое поведение, так как только происходит, когда у Вас есть всего одно текстовое поле, и у Вас есть внимание на текстовое поле.
Я боюсь, что Вы нашли ошибку на браузере, и необходимо будет найти обходное решение или избегать использования onClick события в этом случае.
Я использую onSubmit событие для проверок, потому что это - "более безопасное" событие, которое, более вероятно, будет работать над различными браузерами и ситуациями.
Из любопытства Вы используете DOCTYPE, и если так, который? Я не говорю, что несовместимости с DOCTYPE являются проблемой, но режим причуд - что-то для исключения прежде, чем попробовать что-либо еще.
С самого начала браузеров одно поле ввода в форме отправляло при вводе с кнопкой отправки или без нее. Это было для того, чтобы людям было проще искать сайт из одного поля поиска.
Если вам нужно выполнить какой-либо javascript в форме, безопаснее использовать onsubmit формы (и возвращать false, чтобы остановить отправку), а не выполнять скрипт в onClick кнопки submit. Если вам нужно выполнить javascript из кнопки, используйте type="button" вместо type="submit" - надеюсь, это прояснило, что я имел в виду