我想知道下面的語句是否有任何問題。這句話有什麼不對嗎? (Javascript)
document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value
要問這是因爲,有時它似乎做工精細和休息的時間,就拋出了一個錯誤 - 對象不支持此屬性或方法。
順便說一下,monthId是asp.net頁面中gridview中下拉列表的clientID。
謝謝!
我想知道下面的語句是否有任何問題。這句話有什麼不對嗎? (Javascript)
document.getElementById(monthId).options[document.getElementById(monthId).selectedIndex].value
要問這是因爲,有時它似乎做工精細和休息的時間,就拋出了一個錯誤 - 對象不支持此屬性或方法。
順便說一下,monthId是asp.net頁面中gridview中下拉列表的clientID。
謝謝!
沒有更多的代碼作爲上下文很難評估。但是,如果沒有對這行代碼進行理智檢查,我會期望在沒有選定索引時它會失敗,出現索引越界類型異常。
夥計們,我不確定這句話是否有任何問題,但稍微改變一下我的邏輯(爲了避免使用有問題的陳述)讓事情發揮作用。我選擇這個作爲我的答案,因爲問題可能在其他地方發生,儘管錯誤是針對該線路拋出的。 – user355562 2010-07-11 16:20:49
如果在下拉列表中未選擇任何值,則selectedIndex
將爲-1。
我傾向於在使用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
財產要麼存在,並執行相同的基本東西我在這裏。當你知道發生了什麼後,你可以開始刪除不需要的變量並返回到原來的行,但是爲了調試,在每一行上執行一個操作會更簡單並使用單獨的變量,以便調試器可以向您顯示發生了什麼。
你可能想了解undefined
和null
之間的區別,這個主題有不同的頁面,但這個並不算太壞。
您可以通過添加一個斷點在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
當下拉列表中沒有選擇任何東西時它會拋出錯誤嗎? – MJB 2010-07-11 15:18:13
看起來不錯,我猜''.options'是不支持的屬性或方法,當找不到monthId或不是選擇框時。是否有任何原因monthId不會被發現?它是動態創建的嗎?這個代碼是否在dom準備好之前運行? – Rob 2010-07-11 15:19:23
@MJB - 不確定你的意思是「沒有選擇下拉菜單」。在下拉菜單中不會總是選擇某些東西? @Rob - 是的。 monthId是動態創建的。但是如果monthId不存在,那麼javascript函數不會首先被調用。所以,這方面不應該有任何問題。 無論如何,現在,已經改變了我的邏輯了一點,所以我不使用上述語句來比較我的代碼。到目前爲止工作正常。 – user355562 2010-07-11 16:17:50