通过以编程方式更改文本框值来调用 Javascript onchange 事件

IT技术 javascript textbox onchange
2021-03-08 04:40:37

我面临的问题是:

  • 我在日历控件旁边有一个日期范围的文本框。
  • 当用户从日历中选择一个日期时,它会将该日期填充到文本框中
  • 发生这种情况时,我想触发一个 javascript 函数,但是,“onchange”事件似乎没有发生。

理想情况下,我希望能够将事件作为属性添加到文本框,例如:

txtCreateDate.Attributes.Add("onchange", string.Format("JSfunction({0},'{1}');", arg1, arg2));

更多信息:日期输入到 c# 的文本框中。日历控件在页面上有一个事件处理程序。选择日期后,事件处理程序将日期放入文本框中。我已经尝试在此时将焦点设置到文本框,然后在文本框上放置一个 onBlur 属性,但文本框似乎从未获得焦点。

我想此时我可以直接调用 javascript 函数执行 ClientScript.RegisterClientScriptBlock 或类似的操作,但这似乎很草率,而且永远不会像我想要的那样工作。

6个回答

这是一个老问题,我不确定它是否会有所帮助,但我已经能够使用以下方法以编程方式触发事件:

if (document.createEvent && ctrl.dispatchEvent) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", true, true);
    ctrl.dispatchEvent(evt); // for DOM-compliant browsers
} else if (ctrl.fireEvent) {
    ctrl.fireEvent("onchange"); // for IE
}
虽然你的评论很旧,但它拯救了我今天的一天 :) 谢谢!一个小小的评论,我会颠倒检查的顺序,IE 9 支持调度功能,所以最好先检查符合 DOM 的版本,如果失败回退到 IE 模式,这会强制新的浏览器(如IE 9) 使用更新的(和兼容的)技术。
2021-05-05 04:40:37

您误解了 onchange 事件应用于 textarea 时的作用。在它失去焦点或您按下 Enter 键之前,它不会触发。为什么不从填充文本区域的选择上的 onchange 触发函数?

在此处查看有关 onchange 活动的更多信息:w3schools

你可以简单地用

document.getElementById("elementID").onchange();

我不知道这是否在某些浏览器上不起作用,但它应该适用于 FF 3 和 IE 7+

@matthew_360:您不能从 C# 调用/启动 JavaScript 事件。
2021-05-03 04:40:37
我需要从 c# 中做到这一点,而不是 javascript。
2021-05-16 04:40:37

Onchange仅当用户通过键盘输入内容时才会触发。一个可能的解决方法是首先关注文本字段,然后更改它。

但是为什么不在用户点击日期时获取事件呢?一定已经有一些javascript了。

@Matthew-那毫无意义。如果日期是在服务器端设置的,那么如果您已经在服务器上的某个函数内调用 Onchange 事件,您有什么问题?
2021-04-27 04:40:37
日期是使用 c# 在 txtbox 中设置的,而不是 javascript。我已经尝试在那时将焦点设置到文本框并使用 onBlur 事件,但文本框似乎从未正确获得焦点。
2021-05-05 04:40:37

你的人口来自服务器端。使用 registerclientscript 会将脚本放在表单的开头。您需要使用 RegisterStartupScript(Block) 将脚本放在相关页面的末尾。

前者尝试在 dom 中存在文本区域之前运行脚本,后者将在页面中的该元素创建后运行脚本。