Reputation: 132
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?
Upvotes: 0
Views: 1361
Reputation: 936
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.
Upvotes: 2
Reputation: 460158
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;
}
Upvotes: 0