asp.net textbox的ontextchange事件不能触发

<asp:TextBox ID="time" runat="server" Onclick="new CbsCalendar(this.id)"
Width ="88%" AutoPostBack="true" ontextchanged="time_TextChanged" ></asp:TextBox>onclick事件是显示一个日历,然后textbox中日期变更以后不会触发time_textchanged事件

TextBox控件会被Render成 html 中的 inpu type="text" 控件, 其 AutoPostBack 是通过 input 的DOM事件 onchange 来实现的。以下是 .net 3.5 中 TextBox 生成的 html: <input name="TextBox1" type="text" onchange="javascript:setTimeout('__doPostBack(\'TextBox1\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="TextBox1" />而客户端事件 onchange 只在手动修改文本框的值后才会触发,用脚本修改值并不触发该事件。而你用的日历控件恰恰是通过 javascript 脚本来给文件框设置值的,所以不会有 onchange 事件触发,也就不会回发页面。 变通的实现方法是在日历控件的脚本中设置完文本框的值后调用下文本框的onchange,简单的可以通过 document.getElementById(textbox_id).onchange(); 实现, textbox_id即你传给 new CbsCalendar() 的参数也就是文本框的客户端id。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-07
ontextchanged要在textbox处于焦点状态后改变其内容在失去焦点才调用。

回到你的情况中:电击文本框(或取得焦点)---弹出日历并选择日期(此时焦点移chu文本框,但文本框内容未发生变化)---通过js改变文本框的内容(值为:选择的日期)
第2个回答  2013-06-07
应该是焦点不在文本框上,在日历控件上就算是值改变了也激发不了ontextchanged事件,这个事比较麻烦,我现在也想不到解决方法,只能说一下我的想法,这也算一个bug,以前也遇到过不过忘记是怎么做的
相似回答