当前位置:编程学习 > C#/ASP.NET >>

dropdownlist添加属性的onchange事件,怎么执行??

代码如下:this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");我在后台添加如上代码,html代码
  <script language="javascript">
function load(state)
{
  var drp2=document.getElementById("DropDownList2");
  for(i=drp2.length;i>=0;i--)
    {
     drp2.options.remove(i);
    }
    var oHttpReq=new ActiveXObject("MSXML2.XMLHTTP");
    var oDoc=new ActiveXObject("MSXML2.DOMDocument");
    oHttpReq.open("POST","getdata.aspx?state="+state,false);
    oHttpReq.send("");
    result=oHttpReq.responseText;
    oDoc.loadXML(result);
    items1=oDoc.selectNodes("//PC1/Table/cId");
    items2=oDoc.selectNodes("//PC1/Table/cName");
    var itemsLength=items1.length;
      for(i=0;i<itemsLength;i++)
      {
        var newOption=document.createElement("OPTION");
        newOption.text=items2[i].text;
        newOption.value=items2[i].text;
        drp2.options.add(newOption);
      }
}
window.onload=function()
{
  load('1');
}

</script>
为什么dropdownlist在改变时,onchage事件怎么不执行呢??没有任何反应,我做的时省市联动菜单,dropdownlist1和dropdownlist2我没有做任何修改??  求救!!!!
       在线等.... --------------------编程问答-------------------- 控件添加 AutoPostBack="True" --------------------编程问答-------------------- 不行吧,我想实现的是用ajax无刷新省市联动菜单,这样又要提价服务器了啊...
--------------------编程问答-------------------- 我也这样做过的,可以不刷新添加html控件,但是就是不响应事件 --------------------编程问答-------------------- 我刚才又测试一遍this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");这个根本就不执行,这是怎么回事?? --------------------编程问答-------------------- AutoPostBack="True"
自动回发 --------------------编程问答-------------------- 把生成的Html代码贴出来分析下原因 --------------------编程问答-------------------- 本页html代码<%@ Page language="c#" Codebehind="WebForm3.aspx.cs" AutoEventWireup="false" Inherits="My97DatePicker.WebForm3" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm3</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language="javascript">
function load(state)
{
  var drp2=document.getElementById("DropDownList2");
  for(i=drp2.length;i>=0;i--)
    {
     drp2.options.remove(i);
    }
    var oHttpReq=new ActiveXObject("MSXML2.XMLHTTP");
    var oDoc=new ActiveXObject("MSXML2.DOMDocument");
    oHttpReq.open("POST","getdata.aspx?state="+state,false);
    oHttpReq.send("");
    result=oHttpReq.responseText;
    oDoc.loadXML(result);
    items1=oDoc.selectNodes("//PC1/Table/cId");
    items2=oDoc.selectNodes("//PC1/Table/cName");
    var itemsLength=items1.length;
      for(i=0;i<itemsLength;i++)
      {
        var newOption=document.createElement("OPTION");
        newOption.text=items2[i].text;
        newOption.value=items2[i].text;
        drp2.options.add(newOption);
      }
}
window.onload=function()
{
  load('1');
}

</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<asp:dropdownlist id="DropDownList1" style="Z-INDEX: 101; LEFT: 152px; POSITION: absolute; TOP: 64px"
runat="server" AutoPostBack="True"></asp:dropdownlist><asp:dropdownlist id="DropDownList2" style="Z-INDEX: 102; LEFT: 256px; POSITION: absolute; TOP: 64px"
runat="server"></asp:dropdownlist>
<asp:TextBox id="TextBox1" style="Z-INDEX: 103; LEFT: 416px; POSITION: absolute; TOP: 80px" runat="server"></asp:TextBox>
<asp:Button id="Button1" style="Z-INDEX: 104; LEFT: 472px; POSITION: absolute; TOP: 224px" runat="server"
Text="Button"></asp:Button></FONT></form>
</body>
</HTML>
 后台cs代码:
if(!this.IsPostBack)
{
BindDb bind=new BindDb();

this.DropDownList1.DataSource=bind.DS("select * from PC");
this.DropDownList1.DataTextField="pName";
this.DropDownList1.DataValueField="pId";
this.DropDownList1.DataBind();
this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");
}
接受返回数据getdata.aspx页cs代码:BindDb bind=new BindDb();
string pId=Request.QueryString["state"].ToString();
DataSet mydata=bind.DS("select * from PC1 where pId='"+pId+"'");
XmlTextWriter writer=new XmlTextWriter(Response.OutputStream,Encoding.UTF8);
writer.Formatting= Formatting.Indented;
writer.Indentation=4;
writer.IndentChar=' ';
writer.WriteStartDocument();
mydata.WriteXml(writer);
writer.Flush();
Response.End();
writer.Close();
谢谢了,帮满看看那儿错了!! --------------------编程问答-------------------- this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");
在Page_Load没有加载吧.重新加载.或者另外在其他刷新的地方再重新加载
--------------------编程问答-------------------- 对啊,就是没有加载??应该放在什么地方?? --------------------编程问答-------------------- 不要 AutoPostBack="True" 直接在那里onchange就可以的
<asp:dropdownlist id="DropDownList1" style="Z-INDEX: 101; LEFT: 152px; POSITION: absolute; TOP: 64px"
runat="server" onchange=loade()></asp:dropdownlist> --------------------编程问答-------------------- 没必要到后台代码里去写嘛~ --------------------编程问答-------------------- 好像也不行啊?还有就是load这个函数需要参数,传值,我试了还是没有反应??好像不执行啊... --------------------编程问答-------------------- 你说

我刚才又测试一遍this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");这个根本就不执行,这是怎么回事??

看你的代码不应该不执行这个
你把这个页运行后生成的页的源文件贴一下,看看在客户端生成了什么样的代码? --------------------编程问答-------------------- 你可以在load里获取DropDownList1当前选的值啊,干嘛非要传进去呢? --------------------编程问答-------------------- 好的,源文件:
          
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm3</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language="javascript">
function load(state)
{
  var drp2=document.getElementById("DropDownList2");
  for(i=drp2.length;i>=0;i--)
    {
     drp2.options.remove(i);
    }
    var oHttpReq=new ActiveXObject("MSXML2.XMLHTTP");
    var oDoc=new ActiveXObject("MSXML2.DOMDocument");
    oHttpReq.open("POST","getdata.aspx?state="+state,false);
    oHttpReq.send("");
    result=oHttpReq.responseText;
    oDoc.loadXML(result);
    items1=oDoc.selectNodes("//PC1/Table/cId");
    items2=oDoc.selectNodes("//PC1/Table/cName");
    var itemsLength=items1.length;
      for(i=0;i<itemsLength;i++)
      {
        var newOption=document.createElement("OPTION");
        newOption.text=items2[i].text;
        newOption.value=items2[i].text;
        drp2.options.add(newOption);
      }
}
window.onload=function()
{
  load('1');
}

</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form name="Form1" method="post" action="WebForm3.aspx" id="Form1">
<input type="hidden" name="__VIEWSTATE" value="dDw3NTU1NDQ3NTU7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8dDxwPHA8bDxEYXRhVGV4dEZpZWxkO0RhdGFWYWx1ZUZpZWxkOz47bDxwTmFtZTtwSWQ7Pj47cDxsPG9uY2hhbmdlOz47bDxsb2FkKHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKVw7Oz4+Pjt0PGk8Nj47QDzlsbHkuJznnIE75rGf6IuP55yBIDvpu5HpvpnmsZ/nnIE75rKz5Y2X55yBO+a5luWMl+ecgTvmuZbljZfnnIE7PjtAPDAxOzAyOzAzOzA0OzA1OzA2Oz4+Oz47Oz47Pj47Pj47PrGdk69NpLcJEnLEKwd5CcwLa7cQ" />

<FONT face="宋体">
<select name="DropDownList1" id="DropDownList1" onchange="load(this.options[this.selectedIndex].value);" style="Z-INDEX: 101; LEFT: 152px; POSITION: absolute; TOP: 64px">
<option value="01">山东省</option>
<option value="02">江苏省 </option>
<option value="03">黑龙江省</option>
<option value="04">河南省</option>
<option value="05">湖北省</option>
<option value="06">湖南省</option>

</select><select name="DropDownList2" id="DropDownList2" style="Z-INDEX: 102; LEFT: 256px; POSITION: absolute; TOP: 64px">

</select>
<input name="TextBox1" type="text" id="TextBox1" style="Z-INDEX: 103; LEFT: 416px; POSITION: absolute; TOP: 80px" />
<input type="submit" name="Button1" value="Button" id="Button1" style="Z-INDEX: 104; LEFT: 472px; POSITION: absolute; TOP: 224px" /></FONT></form>
</body>
</HTML>
--------------------编程问答-------------------- onchange="load(this.options[this.selectedIndex].value);" !!!!!!!!!!!!!! --------------------编程问答-------------------- 知道原因了吧;怎么改也不用说了吧 --------------------编程问答-------------------- <select name="DropDownList1" id="DropDownList1" onchange="load(this.options[this.selectedIndex].value);" style="Z-INDEX: 101; LEFT: 152px; POSITION: absolute; TOP: 64px">
--------------------------------------------------------------------------------
上面的代码说明
this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");
已经被执行了,你现在应该在你的javascript里找问题 --------------------编程问答-------------------- this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value);");
===〉
this.DropDownList1.Attributes.Add("onchange","load("+DropDownList1.SelectedValue+");"); --------------------编程问答-------------------- 怎么了阿??是不是没有传值 啊??我怎么样才能获得dropdownlist的值呢(selectvalue) --------------------编程问答-------------------- this.DropDownList1.Attributes.Add("onchange","load("+DropDownList1.SelectedValue+");");
--------------------编程问答-------------------- 帮忙看看javascript代码嘛??看看那个地方错了....谢谢了. --------------------编程问答-------------------- 谢谢,但是我dropdownlist发生改变时.那个this.DropDownList1.Attributes.Add("onchange","load("+DropDownList1.SelectedValue+");");还是原来第一次加载时的值,没有改变?怎么回事?? --------------------编程问答-------------------- 你在load方法前面吧你传进去的参数值alert出来看看
我可能搞错了;不好意思 --------------------编程问答-------------------- 关键时,不提交服务器,那么在pageload事件中的this.DropDownList1.Attributes.Add("onchange","load("+DropDownList1.SelectedValue+");");是不是不执行啊?? --------------------编程问答-------------------- 应为你每次dropdownlist发生改变时向服务器回发
这样每次都会执行
window.onload=function()
{
  load('1');
}
所以建议直接在html里写onchange --------------------编程问答-------------------- this.DropDownList1.Attributes 应该只能通过服务器来反馈~你要做一个无刷新的话用
<ajaxpanel>吧~很简单 --------------------编程问答-------------------- 我在html里写<asp:dropdownlist id="DropDownList1" style="Z-INDEX: 101; LEFT: 152px; POSITION: absolute; TOP: 64px"
runat="server" onchange="load()">  onchange事件,该怎么写??我写那个得不到数据啊??
--------------------编程问答-------------------- load() 里得不到DropDownList1当前选的值吗?? --------------------编程问答-------------------- 倒!你把参数带进去啊 ~ --------------------编程问答-------------------- load()我想要得就是得到当前dropdownlist改变时selectvalue得值,但是不知道怎么传 --------------------编程问答-------------------- 传什么啊;
每当change的时候都会调用load函数;在那里取不就是好了吗????
--------------------编程问答-------------------- Autopostback和onchange两者只能选一个。 --------------------编程问答-------------------- 怎么取 啊??帮忙写写好不好,谢了!! --------------------编程问答-------------------- 我怎么没找到onchange事件呢,,是不是OnSelectedIndexChanged --------------------编程问答-------------------- var drp1=document.getElementById("DropDownList1");
VAR drp1Value = drp1.value;//这就是当前DropDownList1选择的值
--------------------编程问答-------------------- 晕倒,楼主不想刷回去当然不用AutoPostBack了,
后台代码就像你那样加,不过不传那个值,而是把整个DropdownList的Id传过去,然后判断Value,楼主看着办一下吧,嘿嘿。。
fuction load(drop)
{
document.getElementById(drop.id).value==某个值;//在这儿进行判断操作
...

...
}

在前台的页面是不能加onchange的,只能加到后台用楼主的方法加上去,例如

this.DropDownList1.Attributes.Add("onchange","javascript:return load(DropDownList1);");

--------------------编程问答-------------------- 直接在前台写就可以了,没有必要在后台用添加属性的方法进行添加的啊。 --------------------编程问答-------------------- 看了下你的source 
首先这一句   for(i=drp2.length;i> =0;i--) 
不是i> =0
是i >= 0,多了一个空格
另外"DropDownList2 ","MSXML2.XMLHTTP ""MSXML2.DOMDocument "这些字符串中多了空格,好好检查source吧,用vs来debug,一步一步走下就知道错在哪里了。
ps:取得选择值这种方式是没有问题的
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,