代码之家  ›  专栏  ›  技术社区  ›  Sailing Judo

在jquery中,如何确保在设置元素值时触发onchange事件?

  •  1
  • Sailing Judo  · 技术社区  · 15 年前

    我在视图上有一个地址块,如果用户单击复选框,它可以交换一些数据。我的javascript函数如下:

    <script type="text/javascript">
        $().ready(function() {
            $("#UseAccountAddress").change(function() {
                if ($(this).attr("checked")) {
                    $("#Street1").val($("#PrimaryAddressLine1").val());
                    $("#City").val($("#PrimaryCity").val());
                    $("#Country").val($("#PrimaryCountryId").val());
                    $("#State").val($("#PrimaryStateId").val());
                    $("#PostalCode").val($("#PrimaryZip").val());
                }
                else {
                    $("#Street1, #City, #Country, #State, #PostalCode").val('');
                }
            });
        });
    </script>
    

    在大多数情况下,这是非常有效的。

    但是,“country”和“state”元素是下拉列表,其中state根据country的值进行级联(即,从country列表中选择“usa”将使州中填充50多个州和地区,而选择“canada”将为您提供不同的列表)。这个级联列表本身工作得很好(如果我从国家列表中手动选择“美国”或“加拿大”,则正确的值将填充州列表)。

    问题是,当单击useAccountAddress复选框并更改国家/地区的值时,状态列表不会更新。

    似乎这句台词……

    $("#Country").val($("#PrimaryCountryId").val());
    

    …不会引发OnChange事件。

    是否可以在javascript中添加一行以触发国家/地区的onchange事件,以便正确填充状态列表?

    2 回复  |  直到 15 年前
        1
  •  3
  •   womp    15 年前

    您可以通过调用 change() 直接:

    $("#Country").val($("#PrimaryCountryId").val()).change()
    
        2
  •  2
  •   Rob Grant    15 年前
    $("#Country").trigger("change");
    

    我认为这只适用于通过jquery绑定的事件。