博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决TextBox中, JS方法(DatePicker)改变Text内容后, 无法触发OnTextChanged事件的问题
阅读量:7101 次
发布时间:2019-06-28

本文共 2140 字,大约阅读时间需要 7 分钟。

苦恼了2天啊, TextBox控件中, 又JS改变其内容后, 不会触发OnTextChanged事件.

 

想过Ajax, 我就这一个地方用, 一来是觉得浪费, 二来看到有评论说, AjaxPro和DataPicker一起用会报错.

 

有个帖子的回复, 茅塞顿开

原帖:

========================

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事件

 

回答1:

ontextchanged要在textbox处于焦点状态后改变其内容在失去焦点才调用。

回到你的情况中:电击文本框(或取得焦点)---弹出并选择日期(此时焦点移chu文本框,但文本框内容未发生变化)---通过js改变文本框的内容(值为:选择的日期)

回答2:

TextBox会被Render成 html 中的 inpu type="text" 控件, 其 AutoPostBack 是通过 input 的DOM事件 onchange 来实现的。以下是 .net 3.5 中 TextBox 生成的 html:

        <input name="TextBox1" type="text" οnchange="javascript:setTimeout('__doPostBack(\'TextBox1\',\'\')', 0)" οnkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="TextBox1" />

而客户端事件 onchange 只在手动修改文本框的值后才会触发,用脚本修改值并不触发该事件。而你用的控件恰恰是通过 javascript 脚本来给文件框设置值的,所以不会有 onchange 事件触发,也就不会回发页面。 变通的实现方法是在日历控件的脚本中设置完文本框的值后调用下文本框的onchange,简单的可以通过 document.getElementById(textbox_id).onchange(); 实现, textbox_id即你传给 new CbsCalendar() 的参数也就是文本框的客户端id。

 

------最简单的解决方法, 去找My 97 , DatePicker.js, 在最后一个方法function meizzDayClick(n,ex){...}末尾, 添加一个onchange();即可, 例如:      

 if (outObject.onchange)

        outObject.onchange();

 

然后就能触发OnTextChanged事件了

 

 

============================

 

 

 

js给textbox赋值触发onchange事件的方法 来源:   发布日期:2011-10-31      点击次数:6159 发布者IP:218.25.20.78 js中onchange事件是在客户端改变输入控件的值,比如一个textbox,会出发的一个事件。但是如果在js代码中改变一个textbox的value,而不是通过键盘输入改变一个textbox值的话,是不会出发onchange事件的。

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

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

补充一下,上述的fireEvent方法,在firefox浏览器并不支持,那么,如果想在ie和ff都可以运行的话,可是尝试下面的代码。
if (obj.fireEvent)
{
obj.fireEvent('onchange');
}
else
{
obj.onchange();
}
例子 document.getElementById("sel").value="3";
  document.getElementById("sel").fireEvent("onchange");
  function demo()
  {
   var d=document.getElementById("sel").value;
   document.getElementById("tex").value=d;
   //alert(d);
 
  }
本文来自: 详细来源请参考:http://www.greensoftcode.net/techntxt/20111031183727585538312

转载地址:http://axkhl.baihongyu.com/

你可能感兴趣的文章
11GR2 DATAGUARD环境下的DATABASE升级(11.2.0.2升级到11.2.0.3)(1)
查看>>
DB2 手动安装 on Linux
查看>>
【MySQL数据库开发之一】Mac下配置安装数据库-MySQL
查看>>
WebLogic如何设置session超时时间
查看>>
零接触式云数据中心架构Windows Server 2012实现iSCSI SAN无盘引导(2)
查看>>
libgdx游戏引擎开发笔记(九)SuperJumper游戏例子的讲解(篇三)---- 主游戏界面显示框架...
查看>>
CYQ.Data 数据层框架 V4.5.5 版本发布
查看>>
JedisConnectionException Connection Reset
查看>>
3 个可以替代 Emacs 和 Vim 的文本编辑器
查看>>
亲身体验微软的 - 视窗梦幻桌面(DreamScene)
查看>>
【MongoDB学习笔记1】基于CentOS 6.5安装MongoDB
查看>>
dom4j的读写xml文件,读写xml字符串
查看>>
openStack icehouse for centos6.4 production Env 实战
查看>>
IO Foundation 4- 目录结构检查器 FolderStructureChecker
查看>>
windows 8.1 安装 itunes 11 一直失败 然后回滚安装进度
查看>>
修改3389的方法
查看>>
Windows 8实例教程系列 - 理解应用框架
查看>>
使用Windows PowerShell配置Hyper-V虚拟机自动重启
查看>>
Active Directory 基础回顾 (二) 常见的远程控制对比
查看>>
perl面向对象小练习
查看>>