Подтвердить что ты не робот

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

});
4b9b3361

Ответ 1

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

изменить

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

Ответ 2

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

Ответ 3

добавить в опции .ajax

cache: false,

Ответ 4

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

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

Оригинальный html:

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

jQuery script:

$.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(), но ничего выше не получилось!

Ответ 5

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

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

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

Ответ 6

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

var content = ($.browser.msie)? $(this).context.xml: $(this).html();

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

Привет.

Ответ 7

После нескольких разочарований я понял, что 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>

Ответ 8

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

Ответ 9

У меня была такая же проблема после получения 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 );
   ...
}

Ответ 10

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

<cfsetting showdebugoutput="No">

Ответ 11

В моем случае это было так просто, как изменить версию 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.

Ответ 12

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

Ответ 13

У меня возникла проблема с IE:

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

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

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

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

Ответ 17

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

или.. и т.д.

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

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

Ответ 18

В IE8 перейдите в инструменты параметры Интернета → , затем выберите вкладку расширенный. Затем нажмите reset на reset все настройки проводника Интернета.

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

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

Ответ 19

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

Ответ 20

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

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

Пример:

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

Ответ 21

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

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

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

Ответ 22

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

HTML:

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

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

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

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

HTML:

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

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

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

Ответ 23

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

// Works fine

/* Works fine */

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

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

Ответ 24

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

Скопировано из этого ответа: fooobar.com/info/87623/...