代码之家  ›  专栏  ›  技术社区  ›  Cheng Chen

触发jquery中文本框的更改事件

  •  2
  • Cheng Chen  · 技术社区  · 15 年前

    我有一个带有asp:RegularExpressionValidator的asp:TextBox来验证它是否是数字。显然,在呈现时,onchange事件将附加到此文本框。另外,我在$(document)处添加了一个更改事件,准备在值更改时进行计算。

    <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都为空,从而导致异常。我做错什么了吗?有什么解决办法吗?谢谢。

    编辑

    事实证明,这是一个MS bug,在ASP.NET 4 VS2010中运行良好。

    2 回复  |  直到 13 年前
        1
  •  5
  •   Nick Craver    15 年前

    包括Pointy关于ID的观点(我把自己搞砸了),你可以这样写:

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

    不知道你的另一个活动是如何连接的, .triggerHandler() 这是我最好的建议,因为该事件不会冒泡起来被.NET处理程序捕获。

        2
  •  0
  •   Andrew    15 年前

    将计算打包到函数中,并在就绪事件中调用它,而不是触发更改:

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