关于Dropdownlist触发onselectedindexchanged事件的问题?路过请看?很急!

时间:2022-09-19 00:01:39
<select name="ddlDepart" onchange="javascript:setTimeout('__doPostBack(\'ddlDepart\',\'\')', 0)" id="ddlDepart">
<option value="2">市场部</option>
<option selected="selected" value="3">技术部</option>
<option value="4">编辑部</option>
<option value="5">论坛部</option>
<option value="6">财务部</option>
</select>

在点击<option value="2">市场部</option>这个选项的时候不能触发onchange事件、其它的都能行?
如何解决?

8 个解决方案

#1


该回复于2010-12-03 11:37:42被版主删除

#2


这个不清楚 不过点击别的可以为什么那个不可以 你调断点看了吗有没有跳进事件里呢

#3


onChange事件只有在值改变时才可触发,所以必须在每一次选择时(尤其第一次)保证选择的值是改变的!

所以<select name="inv_payee" id="ECS_INVPAYEE" onchange="show_payee();" style="border:1px solid #ccc;">
    <option value="个人" selected >个人</option>  //在这要选定一个默认的值 "selected"

    <option value="单位">单位</option>
    </select>

这样在选择第二个时,值就会变即可触发onChange;

二、我们用Select的onchange事件时,常会遇到这样一个问题,那就是连续选相同一项时,不触发onchange事件.select的 onchange事件就是这样子的.你得有Change(改变),才能触发该事件....
<select name=sel onchange="bao(this.options[this.options.selectedIndex].value)">
<option value="">请选择
<option value="1">Item 1
<option value="2">Item 2
<option value="3">Item 3
</select>
<script>
function bao(s)
{
txt.value =s;
//选择后,让第一项被选中,这样,就有Change啦.
document.all.sel.options[0].selected=true;
}
</script>
<textarea id=txt></textarea>
三、

js中onchange事件是在客户端改变输入控件的值,比如一个textbox,会出发的一个事件。但是如果在js代码中改变一个textbox的 value,而不是通过键盘输入改变一个textbox值的话,是不会出发onchange事件的。

那么,如何在js代码模式通过代码触发textbox控件的onchange事件呢,经过查阅资料,发现js提供了一个方法,可以触发控件的应该是所有事件。object.fireEvent()方法,使用方法如 object.fireEvent('onchange'),即可触发控件的onchange事件。

同理,js中使用fireEvent方法还可以触发其他的空间事件。

触发onchange事件的问题,并不是值一旦更改就会触发onchange事件。
对于onBlur和onFocus可以直接调用object.Blur()和object.Focus(),但javascript 中没有object.Change
事件。

1.ie 处理1

 document.getElementByIdx_x('hid_provider_id').attachEvent("onpropertychange",function(){alert('gggg');});

2.object.fireEvent()可以触发事件,如触发onchange事件则是object.fireEvent('onchange'),以此类推。

例:
  <SELECT   id=select1     onchange="alert(this.value)">  
  <OPTION   value="0">0</OPTION>  
  <OPTION   value="1">1</OPTION>  
  <OPTION   value="2">2</OPTION>  
  </SELECT>  
   
  <INPUT   type="text"   id=text1   name=text1>  
  <INPUT   type="button"   value="Button"   onclick="select1.selectedIndex=text1.value"> 
  手动改变select的值,会触发onchange  
  脚本改变selectedIndex,不会触发onchange
解决办法
if   (select1.fireEvent)  
      select1.fireEvent("onchange")  
  else  
      select1.onchange()

<INPUT   type="button"   value="Button"   onclick="select1.selectedIndex=text1.value;
select1.fireEvent('onchange')">
程序,里因为程序里有多个action里并每个action有多个submit按钮事件,为了区别代码,同时页面隐藏
按钮
<select name="select" onchange="document.getElementByIdx_x('seaoldsubmit').click();">
<option value="0">查询条件</option>
......
</select>
<input type="submit" name="seaoldsubmit" value="确定" style="display:none">
if(submitcheck('seaoldsubmit'))

四、最近项目中遇到一个问题,要用js去触发onchange事件。
上网找了一些资料,IE上有onpropertychang事件,可以用js去触发这个事件,但是Firefox不支持这个事件,
然后在firefox中去绑定一个input事件。但是这是无效的啊,仍然不会去触发onchange事件。
最后只能用未解决方案了!

用js修改值的时候,在js执行修改完之后去执行onchange事件,不过这样即使这个值不改变的话也会调用这个方法。

function handle()
{document.getElementByIdx_x('msg').innerHTML='输入的文字长度为:'+document.getElementByIdx_x('txt').value.length;
}
//firefox下检测状态改变只能用oninput,且需要用addEventListener来注册事件。
if(/msie/i.test(navigator.userAgent))    //ie浏览器
{document.getElementByIdx_x('txt').onpropertychange=handle
}
else
{//非ie浏览器,比如Firefox
document.getElementByIdx_x('txt').addEventListener("input",handle,false);
}
</script>
</head>

<body id="mybody" class="index">
<div id="msg"></div>
<input id='txt' value="" />

#4


你默认的就是<option value="2">市场部</option>
当选择这一项时,并没触发onchange
选择完别的再来选择他,应该就会触发了

#5


选择完别的再来选在第一项、也不会触发事件、设了一个断点看了一下、根本就不进断点。

#6


建议你在option的最前面增加一项“请选择”项,这样就可解决您的问题
<select name="ddlDepart" onchange="javascript:setTimeout('__doPostBack(\'ddlDepart\',\'\')', 0)" id="ddlDepart">
<option value="0">请选择</option>
<option value="2">市场部</option>
<option selected="selected" value="3">技术部</option>
<option value="4">编辑部</option>
<option value="5">论坛部</option>
<option value="6">财务部</option>
</select>

#7


你的代码怎样写的,贴出来看下,这个好像是运行后的源码。

#8


 部门:<asp:DropDownList ID="ddlDepart" AutoPostBack="True"  runat="server" 
                       onselectedindexchanged="ddlDepart_SelectedIndexChanged" 
                       DataSourceID="ObjectDataSource2" DataTextField="DepartName" DataValueField="Id"></asp:DropDownList>                       
                    <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" 
                       SelectMethod="GetIlist" TypeName="BLL.BLL_Department">
                   </asp:ObjectDataSource>
这就是源码!!

#1


该回复于2010-12-03 11:37:42被版主删除

#2


这个不清楚 不过点击别的可以为什么那个不可以 你调断点看了吗有没有跳进事件里呢

#3


onChange事件只有在值改变时才可触发,所以必须在每一次选择时(尤其第一次)保证选择的值是改变的!

所以<select name="inv_payee" id="ECS_INVPAYEE" onchange="show_payee();" style="border:1px solid #ccc;">
    <option value="个人" selected >个人</option>  //在这要选定一个默认的值 "selected"

    <option value="单位">单位</option>
    </select>

这样在选择第二个时,值就会变即可触发onChange;

二、我们用Select的onchange事件时,常会遇到这样一个问题,那就是连续选相同一项时,不触发onchange事件.select的 onchange事件就是这样子的.你得有Change(改变),才能触发该事件....
<select name=sel onchange="bao(this.options[this.options.selectedIndex].value)">
<option value="">请选择
<option value="1">Item 1
<option value="2">Item 2
<option value="3">Item 3
</select>
<script>
function bao(s)
{
txt.value =s;
//选择后,让第一项被选中,这样,就有Change啦.
document.all.sel.options[0].selected=true;
}
</script>
<textarea id=txt></textarea>
三、

js中onchange事件是在客户端改变输入控件的值,比如一个textbox,会出发的一个事件。但是如果在js代码中改变一个textbox的 value,而不是通过键盘输入改变一个textbox值的话,是不会出发onchange事件的。

那么,如何在js代码模式通过代码触发textbox控件的onchange事件呢,经过查阅资料,发现js提供了一个方法,可以触发控件的应该是所有事件。object.fireEvent()方法,使用方法如 object.fireEvent('onchange'),即可触发控件的onchange事件。

同理,js中使用fireEvent方法还可以触发其他的空间事件。

触发onchange事件的问题,并不是值一旦更改就会触发onchange事件。
对于onBlur和onFocus可以直接调用object.Blur()和object.Focus(),但javascript 中没有object.Change
事件。

1.ie 处理1

 document.getElementByIdx_x('hid_provider_id').attachEvent("onpropertychange",function(){alert('gggg');});

2.object.fireEvent()可以触发事件,如触发onchange事件则是object.fireEvent('onchange'),以此类推。

例:
  <SELECT   id=select1     onchange="alert(this.value)">  
  <OPTION   value="0">0</OPTION>  
  <OPTION   value="1">1</OPTION>  
  <OPTION   value="2">2</OPTION>  
  </SELECT>  
   
  <INPUT   type="text"   id=text1   name=text1>  
  <INPUT   type="button"   value="Button"   onclick="select1.selectedIndex=text1.value"> 
  手动改变select的值,会触发onchange  
  脚本改变selectedIndex,不会触发onchange
解决办法
if   (select1.fireEvent)  
      select1.fireEvent("onchange")  
  else  
      select1.onchange()

<INPUT   type="button"   value="Button"   onclick="select1.selectedIndex=text1.value;
select1.fireEvent('onchange')">
程序,里因为程序里有多个action里并每个action有多个submit按钮事件,为了区别代码,同时页面隐藏
按钮
<select name="select" onchange="document.getElementByIdx_x('seaoldsubmit').click();">
<option value="0">查询条件</option>
......
</select>
<input type="submit" name="seaoldsubmit" value="确定" style="display:none">
if(submitcheck('seaoldsubmit'))

四、最近项目中遇到一个问题,要用js去触发onchange事件。
上网找了一些资料,IE上有onpropertychang事件,可以用js去触发这个事件,但是Firefox不支持这个事件,
然后在firefox中去绑定一个input事件。但是这是无效的啊,仍然不会去触发onchange事件。
最后只能用未解决方案了!

用js修改值的时候,在js执行修改完之后去执行onchange事件,不过这样即使这个值不改变的话也会调用这个方法。

function handle()
{document.getElementByIdx_x('msg').innerHTML='输入的文字长度为:'+document.getElementByIdx_x('txt').value.length;
}
//firefox下检测状态改变只能用oninput,且需要用addEventListener来注册事件。
if(/msie/i.test(navigator.userAgent))    //ie浏览器
{document.getElementByIdx_x('txt').onpropertychange=handle
}
else
{//非ie浏览器,比如Firefox
document.getElementByIdx_x('txt').addEventListener("input",handle,false);
}
</script>
</head>

<body id="mybody" class="index">
<div id="msg"></div>
<input id='txt' value="" />

#4


你默认的就是<option value="2">市场部</option>
当选择这一项时,并没触发onchange
选择完别的再来选择他,应该就会触发了

#5


选择完别的再来选在第一项、也不会触发事件、设了一个断点看了一下、根本就不进断点。

#6


建议你在option的最前面增加一项“请选择”项,这样就可解决您的问题
<select name="ddlDepart" onchange="javascript:setTimeout('__doPostBack(\'ddlDepart\',\'\')', 0)" id="ddlDepart">
<option value="0">请选择</option>
<option value="2">市场部</option>
<option selected="selected" value="3">技术部</option>
<option value="4">编辑部</option>
<option value="5">论坛部</option>
<option value="6">财务部</option>
</select>

#7


你的代码怎样写的,贴出来看下,这个好像是运行后的源码。

#8


 部门:<asp:DropDownList ID="ddlDepart" AutoPostBack="True"  runat="server" 
                       onselectedindexchanged="ddlDepart_SelectedIndexChanged" 
                       DataSourceID="ObjectDataSource2" DataTextField="DepartName" DataValueField="Id"></asp:DropDownList>                       
                    <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" 
                       SelectMethod="GetIlist" TypeName="BLL.BLL_Department">
                   </asp:ObjectDataSource>
这就是源码!!