如何在 Ajax 中使用下拉菜单自动填写表单?

Posted

技术标签:

【中文标题】如何在 Ajax 中使用下拉菜单自动填写表单?【英文标题】:How to Auto Fill Form using Dropdown in Ajax? 【发布时间】:2020-12-02 13:44:17 【问题描述】:

我有一个 html 表单:

@using (Html.BeginForm("UpdateServiceClientInformation", "contracts", new  id = Model.Id , FormMethod.Post, new  role = "form" ))
                                        
                                            <div class="row">
                                                <div class="col-sm-6">
                                                    @if (Model.AvailableClients.Count > 0)
                                                    
                                                        <div class="form-group">
                                                            @Html.LabelFor(m => m.AvailableClients)
                                                            @
                                                                Model.AvailableClients.Insert(0, new SelectListItem
                                                                
                                                                    Text = "None",
                                                                    Value = "0"
                                                                );
                                                            
                                                            @Html.DropDownListFor(m => m.AvailableClientId, Model.AvailableClients, new  @class = "form-control" )
                                                        </div>
                                                    
                                                </div>
                                            </div>

                                            <div id="clientInformationInputsWrapper">
                                                <div class="row">
                                                    <div class="col-sm-6">
                                                        <div class="form-group">
                                                            @Html.LabelFor(m => m.ClientForm.FirstName)
                                                            @Html.TextBoxFor(m => m.ClientForm.FirstName, new  @class = "form-control" )
                                                            @Html.ValidationMessageFor(m => m.ClientForm.FirstName, "", new  @class = "text-danger" )
                                                        </div>
                                                    </div>
                                                    <div class="col-sm-6">
                                                        <div class="form-group">
                                                            @Html.LabelFor(m => m.ClientForm.LastName)
                                                            @Html.TextBoxFor(m => m.ClientForm.LastName, new  @class = "form-control" )
                                                            @Html.ValidationMessageFor(m => m.ClientForm.LastName, "", new  @class = "text-danger" )
                                                        </div>
                                                    </div>

                                                </div>

                                               
                                            <input type="submit" class="btn btn-sm btn-primary pull-right" value="Save Changes" />

                                        

它包含可用客户端的下拉列表。现在我需要的是当我选择下拉列表时,表单必须自动填写。我正在使用 Ajax:

 $("#AvailableClientId").on("change", function () 
                var serviceCliendId = $(this).val();
                if (serviceCliendId == "0") 
                    $("#clientInformationInputsWrapper :input").val("");
                 else 
                    $.ajax(
                        url: "/ServiceClient/Details/" + serviceCliendId,
                        type: "GET",
                        success: function (resp) 
                            $("#ClientForm.FirstName").val(resp.FirstName);
                            $("#ClientForm.LastName").val(resp.LastName);
                           
                        
                    )
                
            )

虽然使用这个 ajax 方法命中 API 但表单值没有改变。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

首先通过放置一个console.log检查更改事件是否生效,然后从那里检查serviceCliendId和ajax响应。

$("#AvailableClientId").on("change", function () 
                console.log('Change Event Fired')
                var serviceCliendId = $(this).val();
                console.log('serviceCliendId: ' + serviceCliendId)
                if (serviceCliendId == "0") 
                    $("#clientInformationInputsWrapper :input").val("");
                 else 
                    $.ajax(
                        url: "/ServiceClient/Details/" + serviceCliendId,
                        type: "GET",
                        success: function (resp) 
                        console.log('resp: ' + JSON.stringify(resp))
                            $("#ClientForm.FirstName").val(resp.FirstName);
                            $("#ClientForm.LastName").val(resp.LastName);
                           
                        
                    )
                
            )

【讨论】:

以上是关于如何在 Ajax 中使用下拉菜单自动填写表单?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 php 以编程方式填写 Ajax 表单?

从子表单的组合框中选择下拉菜单后,MS Access 在主表单中填写 ID

使用 AJAX 如何根据数据库中的可用记录为下拉菜单生成选择?

如何使用Google自动完成和Vue js来自动填写地址?

在下拉选择中,如何从数据库中填写完整的表单字段

如何根据用户选择的下拉菜单更改 PHP 中的 SQL 查询