JQuery触发(“更改”)完成另一个触发器(“更改”),其中.change包含ajax

时间:2015-03-22 18:10:33

标签: javascript jquery html ajax

我有各种.change jquery方法,以便使用来自另一个下拉列表的数据填充一个下拉列表;这工作正常。

现在,我无法在显式函数中使用.trigger(“change”)自动触发这些.changes。此显式函数应自动选择正确的下拉项,以便在第一个触发器的ajax完成后,下一个应该执行等。

function populate(id, block, chapter) {
    $("#Chapters").val(chapter).trigger("change");
    $("#Blocks").val(block).trigger("change");
    $("#IDs").val(id);
}

以下是用于填充相应下拉列表的ajax驱动方法: (注意:我使用了async:false来尝试缓解我的等待问题;我发现这很可能不是解决方案,并且解决方案可能位于我上面显示的显式函数中的某处)

    $('#Chapters').change(
    function () {
        var selectedVal = $(this).val();
        $.ajax("/Library/GetBlocksByChapter", {
            async: false,
            data: { "chapterId": selectedVal },
            type: "POST",
            success:
            function (data) {
                $("#Blocks").empty().append("<option value='0'>--Select a Block--</option>");
                $("#IDs").empty().append("<option value='0'>--Please Select a Block First--</option>");
                $.each(data, function (index, value) {
                    $("#Blocks").append("<option class='form-control' value='" + value["dbid"] + "'>" + value["name"] + "</option>");
                }
                );
            }
        });
    }
        );

    $('#Blocks').change(
function () {
    var selectedVal = $(this).val();
    $.ajax("/Library/GetIDsByBlock", {
        async: false,
        data: { "blockId": selectedVal },
        type: "POST",
        success:
        function (data) {
            $("#IDs").empty();
            $.each(data, function (index, value) {
                $("#IDs").append("<option class='form-control' value='" + value["dbid"] + "'>" + value["name"] + "</option>");
            }
            );
        }
    });
}
    );

为了让事情更清楚:我有3个下拉列表,第一个填充第二个等等。 我在页面上有几个按钮,用于调用方法 populate(id,block,chapter)以自动选择下拉列表;其中id,block,chapter是通过ajax在下拉列表中填充的值。

非常感谢任何帮助/建议:)

0 个答案:

没有答案