简体   繁体   中英

Javascript dropdownlist.selectedIndex causing error in ASP.net page

I'm trying to simply enable/disable a button based on whether a value has been selected from a dropdownlist, and for some reason javascript isn't getting the selected index of the dropdownlist. Here's the declaration of the drop down list:

<asp:DropDownList ID="ddlMyDropDownList" runat="server">
    <asp:ListItem> </asp:ListItem>
    <asp:ListItem>Yes</asp:ListItem>
    <asp:ListItem>No</asp:ListItem>
</asp:DropDownList>

In the code behind I'm adding the onChange attribute:

ddlMyDropDownList.Attributes.Add("onchange", "enableButton();")

And this is what the enableButton function looks like, stripped down to the part that is causing problems:

function enableButton() {
    var ddl = document.getElementById('#<%= ddlMyDropDownList.ClientID %>');
    alert("Testing");
    var idx = ddl.selectedIndex;
};

As written the alert fires whenever I change the value of the drop down list. If I move the alert to after the idx line, however:

function enableButton() {
    var ddl = document.getElementById('#<%= ddlMyDropDownList.ClientID %>');
    var idx = ddl.selectedIndex;
    alert("Testing");
};

it doesn't fire, indicating that the ddl.selectedIndex is causing an error somehow. Why might this be occurring and how do I remedy it? Assuming I want to test only if the user has selected anything other than the first option, is there a better/easier way to do so?

If you alert(ddl) you will probably find that ddl is null because there is no element with an id of #<%= ddlMyDropDownList.ClientID %> . Try removing the # from the beginning of the id string.

Throw it out of your JS-function:

<script type="text/javascript">
  var ddlMyDropDownList = '<%= ddlMyDropDownList.ClientID %>';

  function enableButton() {
    var ddl = document.getElementById(ddlMyDropDownList);
  }
</script>

Or - better when possible - pass the reference directly:

ddlMyDropDownList.Attributes.Add("onchange", "enableButton(this);")

Then you don't need to find the element:

function enableButton(ddl) {
    var idx = ddl.selectedIndex;  
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM