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
});
Ответы
Ответ 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/...