javascript: проблема getElementById в IE

Я пытаюсь прикрепить событие click к флажку с помощью JavaScript. Ниже показаны HTML и JS.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <input type="hidden" name="caution_c" value="0">
        <input type="checkbox" id="caution_c" name="caution_c" value="1" tabindex="120">
        <script type="text/javascript">
            var cb = document.getElementById('caution_c');
            cb.onclick = function() {
                alert(1);
            }
        </script>
    </body>
</html>

проблема в том, что в IE, событие click не срабатывает. Я сузил область поиска проблем. Проблема в том, что есть скрытый вход непосредственно перед флажком, и оба этих элемента имеют одинаковое имя. Я не уверен, почему это вызывает проблему(в конце концов, я использую getElementById, а скрытый элемент даже не имеет идентификатор.)

есть ли действительная причина для этого типа поведения (т. е. только. Отлично работает в Firefox...как всегда :( )? Кроме того, есть ли хороший обходной путь (я мог бы просто сделать документ.getElementsByName('caution_c')[1] но я не хочу...)

3 ответов


Internet Explorer запутывается name и id - настоятельно рекомендуется рассматривать эти два атрибута, как если бы они были одинаковыми.

вы можете исправить это либо 1) Убедитесь, что в вашем документе нет конфликтов идентификаторов / имен, либо 2) переопределить собственный getElementById-метод IE.

подробнее об этом здесь:.


попробуйте использовать другое событие, такое как onchange или onfocus чтобы увидеть, если это решает он. Также я не думаю onclick будет запущен, если пользователь вкладок на флажок, который может или не так, как вы собираетесь работать.


Я согласен, IE плохо понимает вещи на уровне html. Я бы предпочел добавить ссылку на кнопку, а не использовать якорные элементы, поскольку IE испытывает проблемы на уровне якоря с документом.getElementById (). Попробовать же на кнопку и будет работать для других пользователей.