我有3个CascadingDropDowns,我正在尝试从客户端设置它们的值。我有一个可行的解决方案,但使用的setTimeout并不总是可靠的,所以我正在寻找更稳定的解决方案。
我遇到的问题是,在设置Parent CascadingDropDown之后,它的子节点不会立即填充 - 加载数据需要几毫秒。因此,在javascript代码中,如果我为父下拉列表分配一个值,然后尝试遍历相应的子值以查找我想要的值,则不会立即填充子下拉列表,因为其数据尚未从Web服务返回。
以下是使用超时的代码对我有用 - 但我希望远离超时。
for (i = 0; i < ddlPC1.length; i++) {
if (ddlPC1.options[i].value == test1) {
var ajaxcdd_ddlPC2 = $find(document.getElementById('ajaxcdd_ddlPC2ID').value);
ddlPC1.selectedIndex = i;
ajaxcdd_ddlPC2._onParentChange(null, false);
break;
}
}
setTimeout(function () {
var ddlPC2 = document.getElementById(document.getElementById('ddlPC2ID').value);
for (i = 0; i < ddlPC2.length; i++) {
if (ddlPC2.options[i].value == test2) {
ddlPC2.selectedIndex = i;
var ajaxcdd_ddlPC3 = $find(document.getElementById('ajaxcdd_ddlPC3ID').value);
ajaxcdd_ddlPC3._onParentChange(null, false);
break;
}
}
setTimeout(function () {
var ddlPC3 = document.getElementById(document.getElementById('ddlPC3ID').value);
for (i = 0; i < ddlPC3.length; i++) {
if (ddlPC3.options[i].value == test3) {
ddlPC3.selectedIndex = i;
break;
}
}
}, 250);
}, 250);
test1,test2和test3是我想要将下拉列表分配给的值。如果我删除超时,for循环将不会迭代,因为子下拉列表中没有立即填充任何数据(来自webservice的数据,大约需要100 ms)。
有没有办法设置子下拉(ddlPC2,ddlPC3)而不必使用setTimeout?
谢谢。