2010-07-11 23 views
1

我想知道下面的語句是否有任何問題。這句話有什麼不對嗎? (Javascript)

document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value 

要問這是因爲,有時它似乎做工精細和休息的時間,就拋出了一個錯誤 - 對象不支持此屬性或方法。

順便說一下,monthId是asp.net頁面中gridview中下拉列表的clientID。

謝謝!

+0

當下拉列表中沒有選擇任何東西時它會拋出錯誤嗎? – MJB 2010-07-11 15:18:13

+1

看起來不錯,我猜''.options'是不支持的屬性或方法,當找不到monthId或不是選擇框時。是否有任何原因monthId不會被發現?它是動態創建的嗎?這個代碼是否在dom準備好之前運行? – Rob 2010-07-11 15:19:23

+0

@MJB - 不確定你的意思是「沒有選擇下拉菜單」。在下拉菜單中不會總是選擇某些東西? @Rob - 是的。 monthId是動態創建的。但是如果monthId不存在,那麼javascript函數不會首先被調用。所以,這方面不應該有任何問題。 無論如何,現在,已經改變了我的邏輯了一點,所以我不使用上述語句來比較我的代碼。到目前爲止工作正常。 – user355562 2010-07-11 16:17:50

回答

0

沒有更多的代碼作爲上下文很難評估。但是,如果沒有對這行代碼進行理智檢查,我會期望在沒有選定索引時它會失敗,出現索引越界類型異常。

+0

夥計們,我不確定這句話是否有任何問題,但稍微改變一下我的邏輯(爲了避免使用有問題的陳述)讓事情發揮作用。我選擇這個作爲我的答案,因爲問題可能在其他地方發生,儘管錯誤是針對該線路拋出的。 – user355562 2010-07-11 16:20:49

2

如果在下拉列表中未選擇任何值,則selectedIndex將爲-1。

0

我傾向於在使用getElementById時進行錯誤檢查。我希望那是你的問題所在。

試試這個,然後在調試器中測試,但我會把警報英寸

var elem = document.getElementById(monthId); 
if (elem.options) { 
    options[document.getElementById(monthId).selectedIndex].value 
} else { 
    alert("elem doesn't have an options property"); 
} 

你可能想不假定value財產要麼存在,並執行相同的基本東西我在這裏。當你知道發生了什麼後,你可以開始刪除不需要的變量並返回到原來的行,但是爲了調試,在每一行上執行一個操作會更簡單並使用單獨的變量,以便調試器可以向您顯示發生了什麼。

你可能想了解undefinednull之間的區別,這個主題有不同的頁面,但這個並不算太壞。

http://weblogs.asp.net/bleroy/archive/2005/02/15/Three-common-mistakes-in-JavaScript-2F00-EcmaScript.aspx

0

您可以通過添加一個斷點在IE開發工具,螢火蟲,Opera蜻蜓或Chrome開發工具的代碼調試您的問題,檢查你的價值觀。

或者您可以添加警報語句來檢查您的值。就個人而言,我認爲當selectedIndex是-1時,代碼會出錯(selectedIndex = -1會在沒有選中時發生)。 檢查一下自己:

alert(document.getElementById(monthId)); // Returns null if nothing is found 
alert(document.getElementById(monthId).selectedIndex); // If the selectedIndex is below 0 it could cause your error 

document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value