2012-02-01 90 views
0

我试图根据是否从下拉列表中选择一个值来启用/禁用一个按钮,由于某种原因,JavaScript没有得到选定的索引下拉列表。这里的下拉列表中的声明:Javascript dropdownlist.selectedIndex在ASP.net页面导致错误

<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以某种方式导致错误。为什么会发生这种情况,我该如何补救?假设我只想测试用户是否选择了除第一个选项以外的任何其他选项,是否有更好/更简单的方法来执行此操作?

+1

您确定您正在获取对ddl控件的引用吗?如果var ddl为空或未定义,则警报仍将触发。也许你可以从那里的断点进入代码,或者尝试检查一个不同的属性。 – DOK 2012-02-01 14:18:15

+0

如果你提醒ddl,你会得到什么回报? – 2012-02-01 14:18:36

回答

2

如果您alert(ddl)您可能会发现ddl为空,因为没有元素的ID为#<%= ddlMyDropDownList.ClientID %>。尝试从id字符串的开头删除#

+0

散列的好处。而不是返回null,我怀疑它会返回undefined。 – 2012-02-01 14:20:22

+0

@JamieDixon是的,我认为你是对的,谢谢。 – 2012-02-01 14:23:51

+0

其实alert(ddl)至少在FireFox中显示为“null”。谢谢你的收获。这些正是我轻易忽视的那些错误。 – 2012-02-01 15:48:28

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