在私有函数中设置事件侦听器

时间:2011-06-14 10:57:05

标签: javascript javascript-events

我的情况:

    function C() {
            this.create = function() {
                    var div=document.createElement("div");
                    div.setAttribute("onclick","alert('this works')");
                    div.onclick=function(){
                            alert("this doesnt work");
                    }
                    document.appendChild(div);
            }
            this.create();
    }
    var x = new C();

是不是可以在javascript中设置onclick事件? 是否应该全局定义被调用的函数???我可以理解它没有全局定义的问题。但我想在我定义onclick事件的函数中使用私有变量。任何建议??????

2 个答案:

答案 0 :(得分:1)

您发布的内容几乎是correct。将元素附加到除document之外的任何内容,例如:document.body。不要使用setAttribute设置事件处理程序,因为它有问题。 您可以使用onclick属性或W3C标准addEventListener方法(IE中的attachEvent)。

function C() {
    this.create = function() {
        var div = document.createElement("div");
        div.innerHTML = "click me";
        var inner = "WORKS!";
        div.onclick = function(){
            alert(inner); // private variable is ok
        };
        document.body.appendChild(div);
        div = null; // avoid memory leak in IE
    };
    this.create();
}
var x = new C();

答案 1 :(得分:0)

怎么样?
div.addEventListener('click', function() {
    alert('hello!');
}, false);

这样,该函数是匿名的,只能在您声明它的范围内看到。它不是全球性的。

以下是addEventListener上的一些API文档:https://developer.mozilla.org/en/DOM/element.addEventListener