我有一个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中运行良好。
答案 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();
});