Событие Onsubmit может молча уничтожить событие onchange, если оно вызывается одновременно. Я предполагаю состояние гонки в двигателе JS. Протестировано в Chrome, FF3, FF6 и IE9.
Для воспроизведения необходимо изменить содержимое ввода и нажать кнопку «Отправить». Не делайте никаких дополнительных кликов между изменением ввода и нажатием кнопки подтверждения.
<div id="somediv">
<div>one</div>
<div>two</div>
</div>
<form method="POST" id="someform">
<input type="text" name="input1" id="someinput" value="change me" />
<input type="submit" />
</form>
<script type="text/javascript">
document.getElementById('someinput').onchange = function() {
//some delay - DOM operations, AJAX or alert:
document.getElementById('somediv').getElementsByTagName('div')[1].style.display = 'none';
//or alert('123');
}
document.getElementById('someform').onsubmit = function() {
alert('This event is not called');
}
</script>
Ожидаемое поведение: событие onchange, затем onsubmit.
Если мы используем кнопку вместо отправки и вызова событий один за другим - все работает как положено.
Если в событии onchange нет операций (без задержки) - работает как положено.
Если onchange изменит цвет div (не отображается) - иногда (3/10) работает как положено, смеется.
js-гуру, пожалуйста, объясните, что, черт возьми, происходит?