3

我创建了一个 JavaScript 对象并将其命名为“按钮”。此对象具有绘制按钮并将其附加到特定 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); };

但我不知道如何定义这个。

4

5 回答 5

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);
    }
}

演示:小提琴

于 2013-05-28T12:03:55.793 回答
1

我知道这是一个老问题,但值得一提的是,您可以在附加到 div 之后完成它:

document.getElementById("topDiv").appendChild(element);
this.element.onclick = function(){ alert(1);};

这更一致,编码更少。 jsfiddle

于 2018-01-18T17:18:37.523 回答
0

您必须创建自己的 click() 方法(将函数作为参数)绑定到 DOM 元素的单击处理程序。您的 draw() 方法可以存储对对象实例中元素的引用,以便您的 click() 方法可以访问它。

于 2013-05-28T11:55:09.117 回答
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); };
于 2013-05-28T11:57:01.147 回答
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+

补充 如果你不能没有 -live-...

从 jQuery 1.4 开始,.live() 方法支持自定义事件以及所有冒泡的 JavaScript 事件。它还支持某些不冒泡的事件,包括更改、提交、聚焦和模糊。

于 2013-05-28T12:02:26.630 回答