在jQuery中触发文本框的更改事件

时间:2010-05-17 10:19:08

标签: c# javascript jquery asp.net

我有一个asp:TextBox with asp:RegularExpressionValidator来验证它是否是一个数字。显然,onchange事件将在渲染时附加到此文本框。另外,我在$(document).ready中添加了一个更改事件,以便在更改值时进行一些计算。

<asp:TextBox id="myText" runat="server" />
<asp:regularexpressionvalidator id="myRev" ControlToValidate="myText" runat="server">*</asp:regularexpressionvalidator>

$(document).ready(function(){
    $('[id$=myText]').bind('change',function(){
           //do something
    }).change();      //force the change event at the very beginning
});

由于寄存器时间的原因,我的函数将比.net生成的js执行得晚。但是asp.net js会抛出一个错误。我追溯到js:

   function ValidatorOnChange(event) {
       ...
   }

发现event.fromElement,event.toElement,event.srcElement都是null,导致异常。我做错什么了吗?有解决方案吗感谢。

修改

它被证明是一个MS错误,在ASP.NET 4 vs2010中运行良好。

2 个答案:

答案 0 :(得分:5)

包括Pointy关于ID的观点(我自我解决),你可以像这样重写它:

$(function(){
  $('#<%=myText.ClientID%>').change(function() {
    //stuff
  }).triggerHandler('change');
});

如果没有确切知道你的其他事件是如何附加的,.triggerHandler()将是我最好的建议,因为事件不会被.Net处理程序捕获。

答案 1 :(得分:0)

将您的计算打包在一个函数中,并在ready事件中调用它,而不是触发更改:

$(document).ready(function(){
    $('[id$=myText]').bind('change',function(){
           doCalc(); // or doCalc(this) or whatever you need
    });
    doCalc();
});