如何在启动 ajax 查询的 jQuery 中触发方法 change()

How to trigger a method change() in jQuery which launch ajax query

我有一个 select 项 html,其中包含部门列表。 当我 select 一个(方法 "change")时,它在 jquery 中启动一个 ajax 请求,它将显示在另一个 select 输入中,一个城市列表来自数据库。

一切正常,但我有一个案例,我希望能够取回为 departement 和 ville select 项目存储的值,同时我希望能够修改它。

我尝试使用 jQuery.trigger("change"),但它没有进入我的更改功能。

我试着按照这里写的去做,但没有什么区别。

我的 html 文件:

<div class="inscriptionForm">
    <label for="departement">Département :</label>
    <select name="departement" id="departement" required="required">
        <option value="">Choisissez un département</option>
        <c:forEach items="${departements}" var="departement">
            <option value="${departement.code}">${departement.code} - <c:out value="${departement.nom}"/></option>
        </c:forEach>
    </select>
</div>

<div class="inscriptionForm">
    <label for="ville">Ville :</label>
    <select name="ville" id="ville" required="required">
        <option value="">Choisissez une ville</option>
        <c:forEach items="${villes}" var="ville">
            <option value="${ville.id}"><c:out value="${ville.nom}"/></option>
        </c:forEach>
    </select>
</div>

我的 Jquery 方法:

$(document).ready(function(){
        var departement = ${spot.departement.code};
        var ville = ${spot.ville.id};
        $("#departement option[value="+departement+"]").prop('selected', true);
        $('#departement').trigger("change");
        $("#ville option[value="+ville+"]").prop('selected', true);

        $('#departement').change(function() {
            var choixDep = $('#departement').val();
            $.getJSON("choixDepartement.do",{codeDep: choixDep},
                function (data) {
                    $("#ville").empty();
                    var option = "<option value=''>Choisissez une ville</option>";
                    $("#ville").append(option);
                    $.each( data, function(key, val) {
                        .....
                       ajax callback treatment
                       ........
                    });
                }
            );
        });
    });

不明白为什么不进入方法.change();

你的代码应该是这样的

$(document).ready(function(){
    var departement = ${spot.departement.code};
    var ville = ${spot.ville.id};
    $("#departement option[value="+departement+"]").prop('selected', true);

    $("#ville option[value="+ville+"]").prop('selected', true);

    $('#departement').change(function() {
        var choixDep = $('#departement').val();
        $.getJSON("choixDepartement.do",{codeDep: choixDep},
            function (data) {
                $("#ville").empty();
                var option = "<option value=''>Choisissez une ville</option>";
                $("#ville").append(option);
                $.each( data, function(key, val) {
                    .....
                   ajax callback treatment
                   ........
                });
            }
        );
    });
    $('#departement').trigger("change");
});

在Jquery中我们应该先定义事件然后我们需要触发

要执行,必须在触发器之前声明 eventListener

再次感谢您。 它在之前声明 change() 函数之后工作, 但我仍然不知道如何 select 我的 "ville" 选项列表中的值,即使您建议将 setTimeout 设置为 0。 执行顺序对我来说似乎很奇怪。我可能还不够了解 jQuery。到目前为止,我的代码看起来像那样,并且 ville 列表没有任何值 selected.

    var departement =${spot.departement.code};
    var ville =${spot.ville.id};

    $("#departement option[value="+departement+"]").prop('selected', true);

    alert(departement);
    alert(ville);

        $('#departement').change(function() {
            var choixDep = $('#departement').val();
            $.getJSON("choixDepartement.do",{codeDep: choixDep},
                function (data) {
                    $("#ville").empty();
                    var option = "<option value=''>Choisissez une ville</option>";
                    $("#ville").append(option);
                    $.each( data, function(key, val) {
                        var valToString = val.toString();
                        var valToArray = valToString.split(",");
                        var option = "<option value=" + valToArray[0] + ">" + valToArray[1] + "</option>";
                        $("#ville").append(option);
                    });
                }
            );
        });

        setTimeout(function(){$('#departement').trigger("change");},0);

        $("#ville option[value="+ville+"]").prop('selected', true);

我的 ville 值,列表在那里,但值没有得到 selected

好的,我找到了问题的完整答案。 首先显然是申报顺序的问题。函数 .change() 应该在调用之前声明。 但是后来它不起作用,因为 Ajax 请求花费了一定的时间,并且 $("#ville option[value="+ville+"]").prop('selected', true); 在请求发送结果之前执行了。所以我只是把这一行放在 ajax 请求之后,现在它可以正常工作了。 所以这是最终代码:

       var departement =${spot.departement.code};

       $('#departement').change(function() {
            var choixDep = $('#departement').val();
            $.getJSON("choixDepartement.do",{codeDep: choixDep},
                function (data) {
                    $("#ville").empty();
                    var option = "<option value=''>Choisissez une ville</option>";
                    $("#ville").append(option);
                    $.each( data, function(key, val) {
                        var valToString = val.toString();
                        var valToArray = valToString.split(",");
                        var option = "<option value=" + valToArray[0] + ">" + valToArray[1] + "</option>";
                        $("#ville").append(option);
                    });
                    $("#ville option[value="+ville+"]").prop('selected', true);
                }
            );
        });

        $("#departement option[value="+departement+"]").prop('selected', true);

        $('#departement').trigger("change");