У меня есть следующий код для динамического создания раскрывающегося списка в браузере IE10, в зависимости от значений, полученных из базы данных
function buildOption(container, namepreface, id, val, txt) {
var obj = $("<option />", { id : namepreface + id, value : val, text : txt});
$("#"+ container).append(obj);
return obj;
}
вот html, который он сгенерировал, который я скопировал из F12, DOM Explorer
<li>
<span class="div120RAlgn inlineblock">
<label for="CostCenter">Cost Center:</label>
</span>
<span class="editor-field-alLw220">
<select id="CostCenter">
<option id="costcenter_0" value="0"> </option>
<option id="costcenter_3" value="3">All</option>
</select>
</span>
</li>
Однако в первый раз, когда я нажимаю стрелку вниз, я получаю пустой ящик, как будто он не инициализирован.
Когда я снова нажимаю на него, он выглядит так, как должен
У кого-нибудь есть идеи относительно того, что происходит и как это исправить? Эта проблема является последовательной независимо от того, что значения и независимо от количества опций в списке
Этот сегмент находится в функции готовности документа
$("#Region").change(function (e) {
loadRegionLocations(e.currentTarget);
});
$("#Location").change(function (e) {
loadLocationsCostCenters(e.currentTarget);
});
И это два метода, называемые
function loadRegionLocations(tar) {
$("#CostCenter").empty();
$("#Location").empty();
buildOption("Location", "location_", 0, 0, ' ');
var selloc = searchArgsForObjLst($(tar).val(), "REGIONID", "LOCATIONNAME", locationlst);
$.each(selloc, function (i, o) {
var c = buildOption("Location", "location_", o.LOCATIONID, o.LOCATIONID, o.LOCATIONNAME);
c.data("REGIONID", o.REGIONID);
});
}
function loadLocationsCostCenters(tar) {
$("#CostCenter").empty();
buildOption("CostCenter", "costcenter_", 0, 0, ' ');
var selcc = searchArgsForObjLst($(tar).val(), "LOCATIONID", "COSTCENTERNAME", costcenterlst);
$.each(selcc, function (i, o) {
var c = buildOption("CostCenter", "costcenter_", o.COSTCENTERID, o.COSTCENTERID, o.COSTCENTERNAME);
c.data("REGIONID", o.REGIONID);
c.data("LOCATIONID", o.LOCATIONID);
});
}
Возможно, я нашел решение этой проблемы. По крайней мере, я добавил код ниже, и пока он работает.
$.fn.redraw = function () {
$(this).each(function () {
var redraw = this.offsetHeight;
});
};
Затем в методах, где я создаю параметры, я добавил вызов этого метода, например
function loadLocationsCostCenters(tar) {
$("#CostCenter").empty();
buildOption("CostCenter", "costcenter_", 0, 0, ' ');
var selcc = searchArgsForObjLst($(tar).val(), "LOCATIONID", "COSTCENTERNAME", costcenterlst);
$.each(selcc, function (i, o) {
var c = buildOption("CostCenter", "costcenter_", o.COSTCENTERID, o.COSTCENTERID, o.COSTCENTERNAME);
c.data("REGIONID", o.REGIONID);
c.data("LOCATIONID", o.LOCATIONID);
});
**$("#CostCenter").redraw();**
}