11

我面临的问题是:

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

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

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

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

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

4

8 回答 8

19

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

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
}
于 2010-09-02T17:06:21.523 回答
8

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

在此处查看有关 onchange 事件的更多信息:w3schools

于 2009-04-09T19:03:13.997 回答
8

您可以简单地触发事件

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

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

于 2009-04-09T19:21:58.757 回答
2

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

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

于 2009-04-09T19:00:59.943 回答
1

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

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

于 2009-04-09T21:56:18.387 回答
1

你可以试试Anthem 库

于 2010-09-02T16:31:26.107 回答
0

您可以将它放在不同的类中,然后调用一个函数。这在ajax刷新时有效

$(document).on("change", ".inputQty", function(e) {

//Call a function(input,input);
});
于 2014-08-22T13:42:38.957 回答
-4

仅当以编程方式更改属性或用户进行更改然后将注意力从字段上移开时,才会触发“onchange”。

你看过使用 YUI 的日历对象吗?我编写了一个解决方案,将 yui 日历放在 yui 面板中并隐藏面板,直到单击关联的图像。我可以看到两者的变化。

http://developer.yahoo.com/yui/examples/calendar/formtxt.html

于 2009-04-09T19:04:29.670 回答