2010-11-23 44 views
3

我希望能夠根據在下拉框中選擇的內容更改圖像...更改基於asp的圖像源:DropDownList選擇

我有這個JS代碼來更改圖像。當然簡化。

<script type="text/javascript"> 
     function changeImage() 
     { 
      var oDDL = document.all("ddlNAME"); 
      var NAME= oDDL.options[oDDL.selectedIndex].text; 

      switch(NAME) 
      { 
       case "Name": 
        document.getElementById("img").src="img1.png"; 
        break; 
       case "Name2": 
        document.getElementById("img").src="img2.png"; 
        break; 
       default: 
        document.getElementById("img").src="img3.png"; 
      } 
     } 
    </script> 

當我調用這個函數時,我在我的DDL實現中執行它。

<asp:DropDownList ID="ddlNAME" runat="server" OnTextChanged="changeImage()" > 

但由於某種原因,changeImage()未觸發。它給我一個錯誤說

'changeImage' is not a member of 'ASP.default_aspx' 

我知道這是一個noob問題,這點小......但是,這是我的第一天,每使用JavaScript所以忍耐一下吧。謝謝!

回答

3

看起來你已經告訴它運行一個服務器端事件,所以它試圖在你的ASPX腳本中找到一個名爲changeImage()的函數。

你需要它來運行一個Javascript事件客戶端。改爲使用onChanged()事件。

<asp:DropDownList ID="ddlNAME" runat="server" onChanged="changeImage();" > 
3

嘗試:

<asp:DropDownList ID="ddlNAME" runat="server" onchange="changeImage()" > 

我相信你正在使用它的方式是使其嘗試調用一個類,而不是一個JavaScript函數。

+0

不是類,ASPX頁面的代碼隱藏文件中的函數。 – 2010-11-23 20:53:43

2

我認爲你需要使用

<asp:DropDownList ID="ddlNAME" runat="server" onchange="changeImage();" > 

代替OnTextChanged

+0

onChanged是一個服務器端函數。 – K4emic 2010-11-23 20:46:35

1

OnTextChanged是一個ASP.Net事件,這還沒有爲JavaScript。它正在您的.vb文件中查找名爲changeImage()的VB函數。

您可以嘗試使用onChange="changeImage()"

您也可以使用關鍵字this在你的函數引用您的功能正在運行的對象(在這種情況下,下拉框),而不是通過getElementById()或以其他方式尋找它。

2

問題是,下拉列表被視爲服務器元素,而不是客戶端控件。當它發生變化時,整個頁面會回傳給服務器,服務器在頁面的類中尋找一個名爲changeImage的方法 - 當它找不到它時,它會拋出錯誤。

此外,你會想要避免像document.all。改爲使用document.getElementById。其中,document.all是DOM級別0的擴展,並且比getElementById慢得多。

1

你需要改變你的下拉代碼如下:

<asp:DropDownList ID="ddlNAME" runat="server" onchange="changeImage()" AutoPostBack="false" > 

的平變化是一個JavaScript事件處理程序,您使用的事件處理程序是ASP.NET控件的事件處理程序。AutoPostBack屬性是必要的,當您明確希望客戶端代碼運行時,防止控件導致回發(執行服務器端代碼)。

1

您必須將JavaScript代碼註冊到頁面,然後將DropDownList的「OnChange」屬性更改爲您的JS函數。您可以在「RegisterStartupScript」和「RegisterClientScriptBlock」部分中找到read more here