В настоящее время я борюсь с ошибкой IE JavaScript / DOM (что забавно), и это действительно поставило меня в тупик.Рассматриваемый код копирует некоторые флажки в форму и должен поддерживать их проверенное состояние.Проблема в том, что IE (в частности IE8, хотя я предполагаю, что и другие) не хочет этого делать.
Я сузил саму ошибку до очень маленького контрольного примера.В основном, все работает правильно без DOCTYPE на странице, но они нарушаются, когда присутствует DOCTYPE.Я бы ожидал обратного, но кто знает, с IE.
Ниже приведены простейшие возможные тестовые случаи.Для каждого из них: откройте страницу в IE, установите флажок, затем нажмите «ТЕСТ».
Не выдает ошибку:
<input type="checkbox" id="broken">
<button id="break">TEST</button>
<script>
document.getElementById('break').onclick = function() {
alert(document.getElementById('broken').outerHTML);
};
</script>
Ссылка
Выдает ошибку:
<!DOCTYPE html>
<input type="checkbox" id="broken">
<button id="break">TEST</button>
<script>
document.getElementById('break').onclick = function() {
alert(document.getElementById('broken').outerHTML);
};
</script>
Ссылка
Ошибка возникает на допустимых страницах (с <html>
, <head>
, <body>
и т. д.) и находится ли ввод внутри формы.В «неработающем» случае externalHTML всегда отражает то, что присутствовало при загрузке страницы (если я проверяю ввод по умолчанию, он всегда предупреждает код с помощью CHECKED, даже если я сначала сниму флажок).То же самое происходит, если я обертываю ввод и использую innerHTML.На реальном сайте я использую метод jcluer .clone () для копирования;.clone () использует .outerHTML для внутреннего использования, и вот как я сузил это.
Мой вопрос таков: есть ли способ обойти это, если я сам вручную создаю новый HTML?И есть ли у кого-нибудь идеи, ПОЧЕМУ это происходит в первую очередь (кроме "IE SUX LOLZ")?