【问题标题】:Trigger the change event of a textbox in jQuery在jQuery中触发文本框的更改事件
【发布时间】:2010-05-17 10:19:07
【问题描述】:

我有一个带有 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 都是 null 导致异常。我做错什么了吗?有什么解决办法吗?谢谢。

编辑

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

【问题讨论】:

  • 您需要运行 .net 处理程序,还是只需要 jQuery 处理程序?
  • @Nick Craver:$(XXX).change() 将触发其所有更改事件。但是为什么生成的js会报错呢?我认为应该正确触发它。
  • 用$('[id$=myText]')代替$('#myText')
  • 错误可能是因为 jQuery 在模拟事件时没有设置全局 event 对象。 (猜测。)
  • @Pointy - 它是 asp.net,*#$%ed 生成时的 ID,至少在 4.0 之前。 @Danny - 我知道 .change() 是如何工作的,我在问你是否需要/想要运行 .Net 事件处理程序:)

标签: c# javascript jquery asp.net


【解决方案1】:

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

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

如果不确切了解您的其他事件是如何附加的,.triggerHandler() 将是我最好的建议,因为该事件不会冒泡以供 .Net 处理程序捕获。

【讨论】:

  • 不工作,我认为 triggerHandler() 在这个问题上与 trigger() 相同。 .net 生成的更改事件将在它们两者中触发。 triggerHandler() 不会触发浏览器事件,但是.net js不是浏览器事件。
  • @Danny - 由于它直接绑定到元素,因此您需要使用此处的方法来触发更改事件:stackoverflow.com/questions/168596/…
  • @Nick Craver 非常感谢您帮助我找到如此有用的文档!我会尝试他们的解决方案!
  • @Nick Craver 我现在确定这是一个 MS 错误。我使用相同的代码在 VS2008 和 VS2010 中创建了一个 Web 应用程序。 2008 年出现错误,而 2010 年一切正常。
  • @Danny - .Net 4 改变了 很多 的东西,这是应对这种情况的众多方法之一。如果你在 Vs 中以 .Net 3.5 为目标2010 你会看到同样的错误。
【解决方案2】:

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

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

【讨论】:

  • 在不知道该方法的内部情况下,这是一个很长的镜头,并且可以大大更短地完成:$('[id$=myText]').change(doCalc);
  • 是的,正确的观点,通常我会做较短的风格,现在专注于要点以使其更明显。
  • 我想知道为什么事件被错误地触发了。我使用了正确的语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多