在Javascript中异步设置子CascadingDropDown

时间:2014-08-06 14:26:01

标签: javascript ajaxcontroltoolkit cascadingdropdown

我有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?

谢谢。

0 个答案:

没有答案