我创建了一个JavaScript对象并命名为' Button'。这个对象有一个绘制按钮并将其附加到特定div元素的函数。
var Button = function (id, value) {
this.id = id;
this.value = value;
this.draw = function () {
var element = document.createElement("input");
element.type = "button";
element.id = id;
element.value = value;
document.getElementById("topDiv").appendChild(element);
}
};
我实例化Button对象并调用draw()函数,如下所示:
var myButton = new Button('btn1', "Test Button");
myButton.draw();
我的问题是我无法处理事件。我想将onclick事件连接到一个函数。例如:
myButton.onClick = function(){ alert(1); };
但我不知道如何定义它。
答案 0 :(得分:2)
尝试
var Button = function (id, value) {
this.id = id;
this.value = value;
this.draw = function () {
this.element = document.createElement("input");
this.element.type = "button";
this.element.id = id;
this.element.value = value;
document.getElementById("topDiv").appendChild(this.element);
}
};
Button.prototype.addEventListener = function(event, handler){
var el = this.element;
if(!el){
throw 'Not yet rendered';
}
if (el.addEventListener){
el.addEventListener(event, handler, false);
} else if (el.attachEvent){
el.attachEvent('on' + event, handler);
}
}
演示:Fiddle
答案 1 :(得分:1)
我知道这是一个古老的问题,但值得一提的是,你可以在追加div之后做到这一点:
document.getElementById("topDiv").appendChild(element);
this.element.onclick = function(){ alert(1);};
这更加一致,而且编码更少。 jsfiddle
答案 2 :(得分:0)
您必须创建自己的click()方法(它将函数作为参数)绑定到DOM元素的单击处理程序。 draw()方法可以存储对象实例中元素的引用,以便click()方法可以访问它。
答案 3 :(得分:0)
如前所述,您应该将事件附加到DOM对象。
简单的方法就是从自定义类中公开DOM元素:
var Button = function (id, value) {
this.id = id;
this.value = value;
var element = document.createElement("input");
this.element = element;
this.draw = function () {
element.type = "button";
element.id = id;
element.value = value;
document.getElementById("topDiv").appendChild(element);
}
};
现在你可以:
var myButton = new Button('btn1', "Test Button");
myButton.draw();
myButton.element.onclick = function(){ alert(1); };
答案 4 :(得分:0)
如果是原生Javascript ....
document.getElementById("btn1").onclick
如果jQuery
$('#btn1').click(//function(){})....
如果jQuery但Button是动态创建的.... 你可以试试..
$('#btn1').live('click',//function(){ })....
编辑:在评论中建议: 请阅读文档中的内容:
从jQuery 1.7开始,不推荐使用.live()方法。使用.on()来 附加事件处理程序。旧版jQuery的用户应该使用 .delegate()优先于.live()。
此方法提供了一种将委托事件处理程序附加到的方法 页面的文档元素,简化了事件处理程序的使用 将内容动态添加到页面时。参见讨论 .on()方法中的直接与委托事件有关的更多信息 信息。
根据其后继者重写.live()方法很简单;这些是用于所有三种事件附件方法的等效调用的模板:
$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+
其他强> 如果你不能没有生活-...
从jQuery 1.4开始,.live()方法也支持自定义事件 所有冒泡的JavaScript事件。它还支持某些事件 不鼓泡,包括改变,提交,聚焦和模糊。