javascript - 关于jquery,重复click问题

查看:128
本文介绍了javascript - 关于jquery,重复click问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这是html文件,内有一个宽高80px的盒子

<!DOCTYPE html>
<html>
<head>
    <script type='text/javascript' src='onc事件.js'></script>
    <script type='text/javascript' src='自制界面库.js'></script>
</head>
<body>
    <div id='one' style="width:80px;height:80px;"></div>
</body>

这是onc事件.js,想要达到点击div使其变灰

window.onload=function(){
    $('#one').click(function(){
        $('#one').css('backgroundColor','#ccc');
    });
}

至于库则是模仿jquery的click和css方法自己写的
现在的问题是div元素可以重复点击,第一次变色,但点一次报错一次

请问如何在不重写click方法、不设置计数器、不屏蔽报错的情况下改正这个报错,还有这到底是什么错误?

补充说明:那个库

var $ =function(args){return new Base(args);}
function Base(args) {
    //创建一个数组,来保存获取的节点和节点数组
    this.elements = [];
    
    if (typeof args == 'string') {
        if (args.indexOf(' ') != -1) {
            var elements = args.split(' ');            //把节点拆开分别保存到数组里
            var childElements = [];                    //存放临时节点对象的数组,解决被覆盖的问题
            var node = [];                                //用来存放父节点用的
            for (var i = 0; i < elements.length; i ++) {
                if (node.length == 0) node.push(document);        //如果默认没有父节点,就把document放入
                switch (elements[i].charAt(0)) {
                    case '#' :
                        childElements = [];                //清理掉临时节点,以便父节点失效,子节点有效
                        childElements.push(this.getId(elements[i].substring(1)));
                        node = childElements;        //保存父节点,因为childElements要清理,所以需要创建node数组
                        break;
                    case '.' : 
                        childElements = [];
                        for (var j = 0; j < node.length; j ++) {
                            var temps = this.getClass(elements[i].substring(1), node[j]);
                            for (var k = 0; k < temps.length; k ++) {
                                childElements.push(temps[k]);
                            }
                        }
                        node = childElements;
                        break;
                    default : 
                        childElements = [];
                        for (var j = 0; j < node.length; j ++) {
                            var temps = this.getTagName(elements[i], node[j]);
                            for (var k = 0; k < temps.length; k ++) {
                                childElements.push(temps[k]);
                            }
                        }
                        node = childElements;
                }
            }
            this.elements = childElements;
        } else {
            //find模拟
            switch (args.charAt(0)) {
                case '#' :
                    this.elements.push(this.getId(args.substring(1)));
                    break;
                case '.' : 
                    this.elements = this.getClass(args.substring(1));
                    break;
                default : 
                    this.elements = this.getTagName(args);
            }
        }
    } else if (typeof args == 'object') {
        if (args != undefined) {    //_this是一个对象,undefined也是一个对象,区别与typeof返回的带单引号的'undefined'
            this.elements[0] = args;
        }
    } else if (typeof args == 'function') {
        this.ready(args);
    }
}

Base.prototype.css = function (attr, value) {
    for (var i = 0; i < this.elements.length; i ++) {
        if (arguments.length == 1) {
            return getStyle(this.elements[i], attr) ;
        }
        this.elements[i].style[attr] = value;
    }
    return this;
}


Base.prototype.click=function(fn){    /*这个是Base对象添加onclick的方法*/
    for(var i=0;i<this.elements.length;i++){
    this.elements[i].onclick=fn;
    }return this;
}

/*三个基础的获取节点的原型*/
Base.prototype.getId=function(id){
    this.elements.push(document.getElementById(id));
    return this;
}
Base.prototype.getTagName=function(tag,parentNode){
    var node= null;
    var temps=[];
    if(parentNode!=undefined){
        node=parentNode;
    }else{
        node=document;
    }
    var tags=node.getElementsByTagName(tag);
    for(var u=0;u<tags.length;u++){
        temps.push(tags[u]);
    }return tags;
}
Base.prototype.getClass=function(className){/*Base对象获取有某个class名字的元素的个数*/
    var all=document.getElementsByTagName('*');
    for(var i=0;i<all.length;i++){
        if(all[i].className==className){
            this.elements.push(all[i]);
        }
    }
    return this;
}

这个问题已被关闭,原因:问题质量差 - 问题太水、伸手党

解决方案

Cannot set property 'backgroundColor' of undefined
翻译:不能给未定义设置属性'backgroundColor'
然后想想,是不是写错了,background-color我这里都有提示~~
结论:当出现bug,一定要看懂错误提示,有道翻译下就行了

这篇关于javascript - 关于jquery,重复click问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆