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

时间:2009-04-09 18:52:09

标签: javascript textbox onchange

我面临的问题是:

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

我希望能够将事件作为属性添加到文本框中,例如:

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

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

我想我可以直接调用javascript函数来执行ClientScript.RegisterClientScriptBlock或类似的东西,但这看起来很草率,从来没有像我想要的那样工作。

8 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:8)

你错误解释了onchange事件在应用于textarea时的作用。直到它失去焦点或你进入后它才会开火。为什么不从填充文本区域的选择中的onchange上激活函数?

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

答案 2 :(得分:8)

您只需使用

即可启动活动
document.getElementById("elementID").onchange();

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

答案 3 :(得分:2)

Onchange仅在用户通过键盘输入内容时触发。 可能 workarround可以是首先聚焦文本字段然后更改它。

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

您可以尝试the Anthem library

答案 6 :(得分:0)

您可以将其放在不同的类中,然后调用函数。这适用于ajax refresh

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

//Call a function(input,input);
});

答案 7 :(得分:-4)

只有在以编程方式更改属性或用户进行更改然后将焦点远离字段时,才会触发“onchange”。

您是否看过使用YUI的日历对象?我编写了一个解决方案,将yui日历放在yui面板中并隐藏面板,直到单击关联的图像。我能够看到其中任何一个的变化。

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