开发者问题收集

调用 javascript 函数时出错:ReferenceError: <函数名称> 未定义

2015-04-30
1522

我动态创建了一个下拉列表。我需要动态添加 onchange 事件并进行回发,以便进行数据库调用。当我更改下拉列表项时,出现错误:

ReferenceError: UpdateLocationList is not defined.

这是我的 javascript 代码:

<head runat="server">
    <title>Locations</title>
    <meta http-equiv="Content-Language" content="en-us"/>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
    <script src = "scripts/jquery-1.11.2.min.js" type = "text/javascript"></script>   
    <script  type="text/javascript">     
        function UpdateLocationList(obj) {
            alert('In function');
            var facilityValue = document.getElementById("FacilityTypeDDL").value;
            alert(facilityValue);
            __doPostBack('FacilityTypeDDL', facilityValue);
        }     
    </script>
</head>
<body>
<%ListLocations()%>
</body>

这是后台代码中的 ListLocations() 方法:

Public Sub ListLocations()

        Response.Write("<div style='text-align:left;'>")
        Response.Write("<label>Facility Type:<select id='FacilityTypeDDL' name='FacilityTypeDDL' size='1' runat='server' onchange='UpdateLocationList(this)'>")

        For Each facility As ListItem In lstBoxFacilityTypes
            'Get the first value in the list and use the ID to to the list of locations below
            If String.Compare(facilityValueSelected, "") = 0 Then
                facilityValueSelected = facility.Value
            End If
            Response.Write("<option value=''" & facility.Value & "''>" & facility.Text & "</option>")
        Next

        Response.Write("</select></label>")
        Response.Write("</div>")
        Response.Write("<hr>")

    End Sub

缺少什么会导致错误,即函数 UpdateLocationList 未定义?

更新 我将下拉列表作为 asp:DropDownList 直接添加到 aspx 页面:

 <body>
 <form id="form1" runat="server">  
        <div style='text-align:center;'>
        <a style='text-decoration:none;font-size:16px;color:blue;background-color:white;width:200px;padding:4px;' href='LocationDetails.aspx?Location_ID=0' target='detailPanel'> Add Location
        </a></div>
        &nbsp&nbsp
        <asp:Label ID="FacilityTypeLbl" runat="server">Facility Type:</asp:Label>
        <asp:DropDownList ID="FacilityTypeDDL" runat="server" AutoPostBack="true" OnSelectedIndexChanged=" FacilityTypeDDL_SelectedIndexChanged">
        </asp:DropDownList>
        <hr/>
     <%ListLocations()%>   
 </form>
</body>

将 OnSelectedChanged 事件添加到后台代码:

Protected Sub FacilityTypeDDL_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles FacilityTypeDDL.SelectedIndexChanged
    strFacilityValue = FacilityTypeDDL.SelectedValue
    ListLocations()
End Sub

我在此方法中设置了一个断点,但它并没有在其中停止。 为什么我的事件没有触发?

2个回答

在 onchange 中,您只应提供函数的名称;您不应添加函数调用。

与其在 HTML 代码中附加事件处理程序,不如将以下内容添加到您的脚本代码中:

$(document).ready(function() {
  $("#FacilityTypeDDL").change(UpdateLocationList);

});

此外,在

function UpdateLocationList(obj) 

中,您可以省略该参数:您不使用它(如果您要使用它,它代表事件)。

Sylvia Stuurman
2015-04-30

我无法让 asp:DropdownList 触发 SelectedIndexChanged 事件。因此,这就是我完成任务的方式。

如上所示动态添加下拉列表,并添加调用 javascript 的更改事件:

onchange='UpdateLocationList()'

此函数必须放在 .js 文件中。此网站已经有一个 .js 文件。它还有一些我用来完成任务的 AJAX 调用。 在 UpdateLocationList() 中,我获取了下拉列表中设置为值属性的服务类型的 ID。然后,我使用已经是 .js 文件一部分的函数,使用服务类型 ID 将 LocationDetails 页面仅显示该服务类型的设施。这是函数:

function updateLocationList() {
var ddlFacilityType = document.getElementById("FacilityTypeDDL");
var facilityValue = ddlFacilityType.options[ddlFacilityType.selectedIndex].value;
processAjax("/editor/Locations.aspx?Location_ID=" + facilityValue, "navPanel");

非常有效。

感谢您的帮助。

Gloria Santin
2015-04-30