JavaScript: проблема getElementById в IE - PullRequest
9 голосов
/ 14 сентября 2010

Я пытаюсь прикрепить событие 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, а у скрытого элемента даже нет идентификатора).

Существует ли веская причина для такого типа поведения (только IE. Работает нормально в Firefox ... как всегда :()? Также есть хороший обходной путь (я мог бы просто сделать document.getElementsByName (' caution_c ') [1] но я не хочу ...)

Ответы [ 3 ]

13 голосов
/ 14 сентября 2010

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

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

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

1 голос
/ 14 сентября 2010

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

0 голосов
/ 15 декабря 2017

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

...