2

我有另一個錯誤造成的IE7(偉大的程序...)我想獲得一個下拉列表到一個JavaScript函數,以便我可以使用它的值隱藏了一些以這些值命名的div。但每次我嘗試使用此下拉列表我得到以下錯誤: 運行時錯誤Microsoft JScript中的:下拉列表沒有定義IE7的javascript錯誤:運行時錯誤微軟的jscript:dropdownlist沒有定義

的JavaScript:

<script src="/Scripts/ShowHide.js" type="text/javascript"></script> 

function ShowHideDivByDropDownList(dropdownlist) { 
    for (i = 0; i < dropdownlist.options.lenght; i++) { 
     var divId = dropdownlist.options[i].value; 
     if (divId != "") { 
      document.getElementById(divId).style.display = "none"; 
     } 
    } 
    document.getElementById(drowdownlist.value).style.display = "block"; 
} 

的下拉列表:

@Html.DropDownList("MainList", 
        new SelectList(Model.ListCategories, 
        Model.List, 
        new { onchange ="ShowHideDivByDropDownList(this)"}) 

編輯:

我已經做了試驗的腳本調整分配,使腳本運行,配置的人似乎已經注意到了這一點:) 。我已經返回腳本到它的原始狀態,但錯誤仍然發生。

+0

該錯誤不是特定於IE7,刪除標記。它會發生在任何瀏覽器,甚至是偉大的Chrome上。我建議在決定特定於其中之一之前,在更多瀏覽器上檢查這些內容。 :) – 2012-02-14 08:59:12

+0

@ShadowWizard它只發生在IE7上,我使用Chrome瀏覽器,它的工作原理非常好,在IE9上也是如此,只有當我在IE9上打開兼容模式來模擬IE7時纔會發生。 – 2012-02-14 09:54:11

+0

如果您將代碼更改爲'onchange =「alert(this); ShowHideDivByDropDownList(this)」'您在更改值時在警報中看到了什麼? – 2012-02-14 10:42:37

回答

0

在你循環您有drowdownlish,而不是drowdownlist。爲了理智,你可能想讓那些下拉列表

function ShowHideDivByDropDownList(dropdownlistid) { 
    var dropdownlist= document.getElementByName(dropdownlistid); 
    for (i = 0; i < dropdownlist.options.count; i++) { 
     var divId = dropdownlist.options[i].value; 
     if (divId != "") { 
      document.getElementById(divId).style.display = "none"; 
     } 
    } 
    document.getElementById(dropdownlist.value).style.display = "block"; 
} 
+0

哦對了,對此遺憾,錯過了一個時,我調整了命名:P,但它不是什麼導致問題。 – 2012-02-14 08:46:02

1

如果它是一個ID使用getElementById(id),如果它是一個名稱使用getElementsByName(name)[0]

getElementByName不存在。

另外要小心你的變量名...

+0

我已經使用了兩個,並且都返回相同的錯誤 – 2012-02-14 09:06:59

0

您可以防止自己這一切混亂 - 爲this answer正確地說,你必須使用getElementById,但如果你改變你的代碼如下:

onchange ="ShowHideDivByDropDownList(this)" 

然後傳遞實際對象的功能,那麼你可以放心,而不是有這樣的代碼:東西

function ShowHideDivByDropDownList(drowdownlist) { 
    for (var i = 0; i < drowdownlist.options.length; i++) { 
     var divId = drowdownlist.options[i].value; 
     if (divId !== "") { 
      var element = document.getElementById(divId); 
      if (element) 
       element.style.display = "none"; 
     } 
    } 
    var element = document.getElementById(drowdownlist.value); 
    if (element) 
     element.style.display = "block"; 
} 

夫婦我一路上固定以及:

  1. 在JavaScript中,數組的長度.length,不.count
  2. 如果有這樣的ID沒有元素你的代碼就會崩潰 - 避免這種事故,它總是以驗證好的做法你真的有這樣的元素 - 你可以添加alert("element does not exist");用於調試目的,但讓整個代碼崩潰,因爲你有錯字不是一件好事。
相關問題