2010-11-23 53 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