考虑这个简化的例子:
服务器端ASP.NET代码:
TextBox theTextBox = ...
theTextBox.Attributes.Add("onchange", "HandleOnChangeEvent");
客户端javascript:
var numberOfChanges;
function HandleOnChangeEvent() {
numberOfChanges++;
alert(numberOfChanges);
}
现在,这是有效的,即每次用户更改文本框中的值时,都会弹出一个对话框,显示自页面加载以来文本框中的值发生更改的次数。
但是如果同一页面上有多个texbox实例呢? numberOfChanges是全局的,因此它将跟踪所有文本框中页面上的更改总数。我希望它对每个单独的文本框都是特定于实例的。
解决此问题的首选方法是什么?不知道它是否重要,但我应该提到我的真实场景要复杂得多,状态变量多于本例中的一个。
谢谢! / Fredrik
答案 0 :(得分:1)
充分利用JavaScript的原型性质并在使用的基础上扩展文本框,如下所示:
function HandleOnChangeEvent(e) {
// `e` contains the DOM element that was clicked
if( !e.numberOfChanges ) e.numberOfChanges = 0; // dynamically set the property
e.numberOfChanges++;
alert( e.numberOfChanges );
}
您需要将onchange
属性更改为:
onchange="HandleOnChangeEvent(this);"