Я два дня пытаюсь найти решение для этого. Я использую jQuery.ajax () для захвата значений из базы данных для обновления поля при изменении другого поля. PHP-скрипт захватывает значения из базы данных, а затем выплевывает json. ИТ отлично работает в FF, но во всех версиях IE поле выбора не обновляется. Я подтвердил, что вывод json хорош.
Вот jquery:
function getVendors(dest,selectSup) { var vend = $('select#sup').val(); $.ajax({ beforeSend: function(){ $("select#dest").parent().addClass('loading'); }, type: "GET", dataType: "json", cache: false, url: '/search/cruiseselect/?type=vendors&supplier=' + vend + '&dest=' + dest, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(data) { $("select#sup option").remove(); var any = "<option value=\"any\">-- All Cruise Lines --</option>"; $(any).appendTo("select#sup"); $.each(data, function(i, j){ if(j != null && j != undefined) { var sel = j.value == selectSup ? " selected" : ""; var row = "<option value=\"" + j.value + sel + ">" + j.text + "</option>"; //$(row).appendTo("select#sup"); $("select#sup").append(row); } }); }, complete: function(){ $("select#dest").parent().removeClass('loading'); } }); } jQuery(document).ready(function(){ //dynamic select boxes $("select#dest").change(function(){ var selectSup = $("select#sup").children("option:selected").val(); getVendors($(this).val(),selectSup); }); });
У меня это в моем php
header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo json_encode($json);
И он выводит правильный json без дополнительных запятых или чего-то еще. Более того, если я использую alert (j.value + j.text); в моем цикле .each () я получаю правильные данные в IE, поэтому кажется, что jquery appendTo () не работает.
У кого-нибудь есть идеи?
Я немного удивлен, что jQuery не справляется с этим (я думал, что это так … возможно, это работает .html ()).
Проблема основана на ошибке IE (6,7 и 8), которую вы не можете установить .innerHTML списка выбора .
Используя «ванильный» Javascript, вы можете использовать объект Option для создания новых параметров и добавления их к выбору, или вы можете сразу установить весь список Select (например, включая теги выбора).
var mySelect = $("select#sup").get(0);//get actual DOM element var newOpt,selLen; for(var i=0;i<10;i++){ newOpt = new Option('Label: ' + i, i); //format new Option(text, value, defaultSelected, selected); //add new option to select object selLen = mySelect.options.length; mySelect.options[selLen] = newOpt; //This may also work, but I don't recall if IE6 supports the .push() //method on the options collection, if so, this line will replace the 2 above // mySelect.options.push(newOpt); }