Javascript dropdownlist.selectedIndex que causa un error en la página ASP.net

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?

preguntado el 01 de febrero de 12 a las 14:02

Are you sure you are getting a reference to the control in ddl? If var ddl is null or undefined, the alert will still fire. Perhaps you could step into the code from a breakpoint there, or try examining a different property. -

If you alert ddl, what do you get back? -

2 Respuestas

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

Respondido 01 Feb 12, 18:02

Nice spot on the hash. Rather than returning null i suspect it'll return undefined. - Jamie Dixon

Actually alert(ddl) showed "null", at least in FireFox. Thanks for the catch. Those are exactly the kinds of errors that I overlook too easily. - Venture Free

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;  
}

Respondido 01 Feb 12, 18:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.