使用事件处理程序创建javascript对象

时间:2013-05-28 10:56:33

标签: javascript html

我创建了一个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); };

但我不知道如何定义它。

5 个答案:

答案 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事件。它还支持某些事件   不鼓泡,包括改变,提交,聚焦和模糊。