Я вынужден работать с IE8 (8.0.7601.17514), и у меня есть эта простая страница:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<form action=".">
<input type="radio" name="rad" value="1" onchange="alert(1);"/>
<input type="radio" name="rad" value="0" onchange="alert(0);" checked="checked"/>
</form>
<a href="#" onclick="location.href='http://google.com'; return false;">some dummy link</a>
</body>
</html>
Что я ожидаю, так это то, что, когда выбран второй переключатель, щелчок по первому немедленно вызовет предупреждение. Это отлично работает в FF.
На самом деле происходит то, что когда я нажимаю на первое радио, ничего не происходит. Затем, когда элемент размыт (например, я щелкнул в другом месте, другое радио, некоторое соединение на странице и т.д.), ТОГДА предупреждение поднято.
Есть ли обходной путь к этому?
EDIT:
очевидно, это поведение в точности соответствует спецификация W3C
изменить
Событие изменения происходит, когда элемент управления теряет фокус ввода, и его значение было изменено с момента получения фокуса. Это событие действует для INPUT, SELECT и TEXTAREA. элемент.
(благодаря @mu-is-too-short).
Обходной путь к этому заключается в том, чтобы добавить onclick blur + focus:
function radioClick()
{
this.blur();
this.focus();
}
<input type="radio" name="rad" value="1" onclick="radioClick" onchange="alert(1);"/>