addEventListener不适用于" textarea"或"身体"

时间:2014-05-24 02:58:01

标签: javascript html

我正在为对象编写detect()函数,当用户console.logmouseover元素时,用户会收到click消息。我坚持为两个元素添加onclickonmouseover(或更多,但我无法看到):textareabody

运作良好的元素是label。当我点击它或鼠标悬停它时,我收到一条console.log消息。

这是我的代码:

function $count(string){
    count = count + 1;
    if(count <= 9999){
        if(count <= 999){
            if(count <= 99){
                if(count <= 9){
                    $log("0000" + String(count) + " : " + string);
                }else{
                    $log("000" + String(count) + " : " + string);
                }
            }else{
                $log("00" + String(count) + " : " + string);
            }
        }else{
            $log("0" + String(count) + " : " + string);
        }
    }else{
        $log(String(count) + " : " + string);
    }
}

function $detect(obj, type, script){
    if(obj.addEventListener){
        obj.addEventListener(type, script, false);
    }else{
        if(window.attachEvent){
            window.attachEvent('on' + type, script);
        }else{
            console.log("Neither window.addEventListener nor window.attachEvent is working.");
        }
    }
}

Object.prototype.listen = function(){
    if(typeof(this) == "object"){
        if(this.constructor == Array){
            for(var i = 0; i < this.length; i++){
                $detect(this[i], 'click', $count(this[i] + " EVENT : onclick"));
                $detect(this[i], 'mouseover', $count(this[i] + " EVENT : onmouseover"));
            }
        }else{
            if(isElement(this)){
                $detect(this, 'click', $count(this + " EVENT : onclick"));
                $detect(this, 'mouseover', $count(this + " EVENT : onmouseover"));
            }else{
                console.log("ERROR : this.constructor is not 'Object' or 'Array'.");
                return null;
            }
        }
    }else{
        console.log("ERROR : typeof(this) is not 'Object'.");
        return null;
    }
    return this;
};

当我执行此操作时:

document.getElementsByTagName("textarea")[0].listen();

当我点击它或将鼠标移到它上面时,我愿意收到console.log。但是,当我点击textarea时,它不会产生console.log

我想问题出在detect()listen()

但我不想使用element.onclick = function(){};,因为它会涵盖原始功能,而且我无法添加其他onclick,因此使用addEventListener应该会更好。

我应该在哪里或哪个部分更改我的代码?

1 个答案:

答案 0 :(得分:0)

问题出在listen()部分:

//...
$detect(this, "click", $count("blahblahblah");

我需要将$count("blahblahblah")包裹在function(){ }中 那就是问题所在。就是这样。