我试图根据是否从下拉列表中选择了一个值来启用/禁用按钮,并且由于某种原因,javascript没有获得下拉列表的选定索引。这是下拉列表的声明:
<asp:DropDownList ID="ddlMyDropDownList" runat="server">
<asp:ListItem> </asp:ListItem>
<asp:ListItem>Yes</asp:ListItem>
<asp:ListItem>No</asp:ListItem>
</asp:DropDownList>
在后面的代码中我添加了onChange属性:
ddlMyDropDownList.Attributes.Add("onchange", "enableButton();")
这就是enableButton函数的样子,剥离到导致问题的部分:
function enableButton() {
var ddl = document.getElementById('#<%= ddlMyDropDownList.ClientID %>');
alert("Testing");
var idx = ddl.selectedIndex;
};
正如所写,每当我更改下拉列表的值时,警报就会触发。但是,如果我将警报移到idx行之后:
function enableButton() {
var ddl = document.getElementById('#<%= ddlMyDropDownList.ClientID %>');
var idx = ddl.selectedIndex;
alert("Testing");
};
它不会触发,表明ddl.selectedIndex以某种方式导致错误。为什么会发生这种情况,我该如何解决呢?假设我只想测试用户是否选择了第一个选项以外的其他选项,是否有更好/更简单的方法呢?
答案 0 :(得分:2)
如果您alert(ddl)
,您可能会发现ddl
为空,因为没有ID为#<%= ddlMyDropDownList.ClientID %>
的元素。尝试从id字符串的开头删除#
。
答案 1 :(得分:0)
把它扔出你的JS函数:
<script type="text/javascript">
var ddlMyDropDownList = '<%= ddlMyDropDownList.ClientID %>';
function enableButton() {
var ddl = document.getElementById(ddlMyDropDownList);
}
</script>
或 - 尽可能更好 - 直接传递参考:
ddlMyDropDownList.Attributes.Add("onchange", "enableButton(this);")
然后你不需要找到元素:
function enableButton(ddl) {
var idx = ddl.selectedIndex;
}