2012-02-01 79 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; 
} 
相關問題