我正在为对象编写detect()
函数,当用户console.log
或mouseover
元素时,用户会收到click
消息。我坚持为两个元素添加onclick
和onmouseover
(或更多,但我无法看到):textarea
和body
。
运作良好的元素是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
应该会更好。
我应该在哪里或哪个部分更改我的代码?
答案 0 :(得分:0)
问题出在listen()
部分:
//...
$detect(this, "click", $count("blahblahblah");
我需要将$count("blahblahblah")
包裹在function(){
}
中
那就是问题所在。就是这样。