在动态创建的元素(即自定义控件)上绑定时,JQuery引用对象实例
我正在实现一个客户端“自定义控件”,但我很难在事件处理程序中获得对创建控件的对象的引用。最好用一些简单的代码来解释它在动态创建的元素(即自定义控件)上绑定时,JQuery引用对象实例,jquery,oop,custom-controls,jquery-events,Jquery,Oop,Custom Controls,Jquery Events,我正在实现一个客户端“自定义控件”,但我很难在事件处理程序中获得对创建控件的对象的引用。最好用一些简单的代码来解释它 function myControl(text) { this.Text = text; this.DoAlert = function (e) { alert(e.Text); }; this.Create = function (container) { var btn = $('<BUTT
function myControl(text) {
this.Text = text;
this.DoAlert = function (e) { alert(e.Text); };
this.Create = function (container) {
var btn = $('<BUTTON/>');
btn.html('Click Me');
container.append(btn);
btn.bind('click', this, this.DoAlert);
}
}
$(document).ready(function () {
var control1 = new myControl('Button 1');
control1.Create($('#container'));
var control1 = new myControl('Button 2');
control1.Create($('#container'));
});
功能myControl(文本){
this.Text=文本;
this.DoAlert=函数(e){alert(e.Text);};
this.Create=函数(容器){
var btn=$('');
html(“单击我”);
容器追加(btn);
btn.bind('click',this,this.DoAlert);
}
}
$(文档).ready(函数(){
var control1=新的myControl(“按钮1”);
控件1.创建($(“#容器”);
var control1=新的myControl(“按钮2”);
控件1.创建($(“#容器”);
});
如您所见,我正在创建两个用不同字符串初始化的myControl实例,在DoAlert内部,如何获取创建按钮的对象的引用,以便获取其属性
这是Javascript/jQuery可以接受的方法还是我应该做其他事情?您有多种选择: 1) 您可以在事件处理程序周围的闭包中包含
此:
function MyControl() {
var _this = this;
this.DoAlert = function(e) { alert(_this.Text); };
// ...
}
变量_this将绑定到this
甚至在函数DoAlert
内部
2) 您使用$。代理
(参考):
3) 正确使用事件数据(参考:)
我个人推荐2)因为它非常透明(构造函数中的此
与事件处理程序中的此
相同)。太棒了,谢谢!我在问问题和回答问题之间的1分钟内发现了选项3,但由于您强调的原因,我实施了选项2。非常感谢你。
function MyControl() {
// ...
btn.bind('click', $.proxy(this.DoAlert, this));
// ...
}
function MyControl() {
this.DoAlert = function(e) { alert(e.data.Text); }
// ...
}