Атрибут jQuery html не работает в IE

Я использую раскрывающиеся списки стран и штатов в своей форме. Всякий раз, когда пользователь выбирает страну в раскрывающемся списке, соответствующие штаты страны будут отображаться в раскрывающемся списке штатов. Я заполняю состояния в раскрывающемся списке с помощью вызова AJAX. Проблема в том, что состояния заполняются в Mozilla, но в IE это не работает. Я предполагаю, что в jQuery есть проблема при загрузке состояний в раскрывающемся списке состояний. Код jQuery, который я использую,

$('select#edit-country').change(function(e) {

    $.getJSON("loadContactUsStates",{id: $(this).val(), ajax: 'true'}, function(j){
        var options = '';

        for (var i = 0; i < j.length; i++) { 
            options += '<option value = "' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';

        }

    <!-----I guess the problem is with the below line------------------>
       $("select#edit-state").html(options);

    })//end json

});

возможный дубликат Почему IE не добавляет <option> в мой выпадающий список?

user57508 10.05.2012 15:03
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
20
1
55 705
24

Ответы 24

Попробуйте использовать добавить вместо метода html, как подробно описано в этом Почта.

редактировать

Собственно, я сам столкнулся с этой проблемой. Для меня ответ заключался в том, чтобы сначала вызвать пустой, затем добавить, который имеет тот же эффект (я думаю?), Что и использование метода html.

Должен, но посмотрите мой пост про поломку 1.4.2.

Stefan Kendall 20.04.2010 01:16

Также обратите внимание, что если вы используете префикс tagName в своем селекторе, это медленнее, чем просто использование идентификатора.

В вашем случае просто используйте $("#edit-state").append(options)

Я столкнулся с той же проблемой, и ни одно из предложенных исправлений не помогло. Оказывается, причиной были символы табуляции в переданной строке. Как только я удалил их все, и html (), и append () работали нормально. Думаю, для IE .. hmpf нет форматированных строк.

Убедитесь, что любой код JavaScript в возвращаемых данных синтаксически правильный.

У меня был объект параметров JSON с конечной запятой, и этого было достаточно, чтобы IE отказался его запускать.

Также (в моем случае) проверьте, есть ли у вас действительный html, у меня были несовпадающие теги, и он работал в firefox, а не в IE (6-8)

У меня была та же проблема, странно, что незакрытый тег заставлял IE игнорировать весь контент.

Marek Kowalski 02.05.2012 17:37

То же самое ... У меня был тип в одном из моих тегов <option>, и это доставило мне около 2 часов страданий.

Joe Meyer 19.10.2012 22:58

В моем случае возвращаемые данные тоже должны быть синтаксически правильными. У меня были несогласованные теги, например, незакрытые теги

или .. и т. д.

проверьте правильность всех данных

Если это запрос ajax, то быстрый способ отладки - добавить текстовую область за пределами области, которую вы заполняете, и заполнить текстовую область возвращенными данными. затем проверьте эти данные на наличие несоответствий. Jquery.html отлично работает с IE

В IE8 перейдите в инструменты-> настройки интернета-> затем выберите вкладку передовой. Затем нажмите сброс настроек, чтобы сбросить все настройки Internet Explorer.

Я думал, что у меня проблема с кодом, но проблема была в IE8. Это сработало.

Удачи и надеюсь, что это поможет.

Вы используете 1.4.2? Возникла проблема с методом cleanData, использующим недопустимые записи кеша в IE. Ошибка и соответствующее исправление можно найти в здесь. Это влияет на звонки на .html().

есть идеи, как обойти это без обновления до новой версии jQuery?

Marc Stober 22.07.2010 22:53

Ага. Просто измените библиотеку jQuery, включив в нее строку, которую я там разместил.

Stefan Kendall 23.07.2010 00:11

Если вы разбираете xml с помощью jquery и вам нужен html () в IE, попробуйте следующее:

var content = ($ .browser.msie)? $ (это) .context.xml: $ (это) .html ();

Это решило мою проблему. Надеюсь, это кому-то тоже поможет.

Привет.

У меня была такая же проблема после получения HTML-запроса AJAX с функцией jQuery.ajax (), а затем попытки проанализировать результат с помощью jQuery (html_result_data). Решение заключалось в том, чтобы удалить заголовок и все вкладки и «возвраты» в html_result_data следующим образом:

success: function( data ) {
   // God this is ugly
   data = data.split("<body>")[1].split("</body>")[0];
   data = data.split("\t").join("").split("\r").join("").split("\n").join("");                      
   data = jQuery( data );
   ...
}

После нескольких часов разочарования я понял, что IE не поддерживает функции атрибута jquery для элементов html5, кроме div. Я пытался это сделать:

success: function (response, textStatus, XMLHttpRequest) {
    $response = $(response.replace(/\t/g, " "));
    $responseHTML = $response.find("#pageContainer").html();
    $container.html($responseHTML);

Для этого элемента:

<nav id = "pageContainer" class = "content">
</nav>

Изменив его на это, он решил проблему:

<nav>
    <div id = "pageContainer" class = "content">
    </div>
</nav>

Вот что у меня сработало: (я тестировал IE7 - IE9 и Chrome)

Похоже, что уловка для IE заключается в использовании оболочки DIV

Исходный HTML:

<div  id = "dynamicMenu"></div>

скрипт jQuery:

$.ajax({

            url: "/myapp/myajaxUrl.jsp",
            type: "GET",
            dataType: "html",
            async: false,
            success: function(msg) {
                $("#dynamicMenu").html(msg);
            });

Где msg выглядит примерно так:

<TABLE>
<TBODY>
 <TR>
  <TD><LABEL for = "dropdown1">OS type:</LABEL></TD>
  <TD>
   <SELECT id = "dropdown1">
    <OPTION selected value = "">Select OS</OPTION>
    <OPTION value = "WIN">Windoze</OPTION>
    <OPTION value = "UX">Unix</OPTION>
    <OPTION value = "LX">Linux</OPTION>
   </SELECT>
  </TD>
 </TR>
</TBODY>
</TABLE>

Я пробовал .empty () .html () безрезультатно, но все вышеперечисленное отлично сработало!

Я столкнулся с той же проблемой, когда html не работает в IE.

Я считаю, что это не сработает, если у вас недействительный html

Пример:

В моем случае я использую div без закрывающего тега. Таким образом, недопустимый html может быть виновником IE

Комментарий Юкумса побудил меня попробовать отключить вывод отладки ColdFusion, и затем .html () работал у меня в IE8. Чтобы отключить вывод отладки:

<cfsetting showdebugoutput = "No">

В моем случае это было так просто, как изменить версию jquery. Я использовал jquery-1.3.2 и добавил эту строку

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"> </script>

вместо импорта jquery-1.3.2. Не меняя ничего в исходном коде, функция .prepend отлично работает в IE, FF и Chrome.

Поскольку решение здесь не упоминается: У меня была такая же проблема в IE8 при активации режима совместимости. Решением было передать объект jQuery функции .html () следующим образом:

$("select#edit-state").html($(options));

Это не было проблемой, если параметры были объектом jQuery и также были созданы как один. Но в приведенном выше примере это должно помочь - по крайней мере, для меня.

добавить в параметры .ajax

кеш: ложь,

У меня была такая же проблема, и я обнаружил, что самым простым решением было использование функции replaceWith().

Следующий метод решил проблему для меня:

$('Element ID OR Class').empty().html(string);

Сначала используйте empty(), а затем установите html с помощью html()

Да, у меня тоже сработало. единственная проблема была с IE, и этот метод решил ее.

AbdulBasit 01.06.2015 15:17

У меня возникла проблема с IE, используя это:

$('#valor_total').html(valor_total); 

где id имел то же имя, что и переменная, переданная в качестве параметра. Смена идентификатора сработала хорошо:

$('#div_valor_total').html(valor_total); 

Для меня я мог заставить его работать, только поместив свой выбор в заполнитель div, а затем записав через .html (); весь оператор к этому div. Работает полностью.

В моем случае мне пришлось изменить селектор, который был тегом <figure>. Вот что у меня было:

HTML:

<figure id = "imagen">...</figure>

JS (не работает):

$("#imagen").html(res);

И мне пришлось заменить на:

HTML:

<div id = "imagen">...</div>

JS (оно работает!):

$("#imagen").html(res);

В моем случае проблема заключалась в том, как я комментировал свой javascript в загружаемых данных.

// Works fine

/* Works fine */

<!-- This causes a syntax error in IE -->

У меня никогда раньше не было проблем с таким комментарием в IE, только при использовании ajax для загрузки его на существующую страницу. Нет проблем и с другими браузерами.

Добавление атрибута no cache к контроллеру исправило это для меня.

Скопировано из этого ответа: https://stackoverflow.com/a/12948321/1389589

Другие вопросы по теме