javascript - js的构造函数
天蓬老师
天蓬老师 2017-04-11 10:55:53
[JavaScript讨论组]
        var btn=document.querySelector('button');
        function Mask() {
            this.mask=null
            this.createMask=function(){
                var html="";
                    html='<p class="mask"></p>';
                    document.body.innerHTML+=html;
                    // this.mask=document.querySelector('.mask');
            };
        }
        var obj=new Mask();
        btn.onclick=function(){
            console.log('a')
            obj.createMask();
            
        }

为什么只有第一次点击会执行函数。第二次点击连console.log()也不打印了。。麻烦知道的给回答下。。蟹蟹

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
ringa_lee

来看看 innerHTML 的机理

Removes all of element's children, parses the content string and assigns the resulting nodes as children of the element.
via https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML

说明此 button 已经不是原来的 button 了,自然不会响应事件

PHP中文网

你得改改:

var btn = document.querySelector('button');
function Mask() {
    this.mask = null
    this.createMask = function() {
        var mask = document.createElement('p');
        mask.className = 'mask';
        document.body.appendChild(mask);
    };
}
var obj = new Mask();
btn.onclick = function() {
    console.log('a')
    obj.createMask();
};

现在试试看

阿神

为了方便理解,我把代码写了一下

楼上说的都对,原理参考一楼,解决方案参考二楼.

var btn=document.querySelector('button');
    function Mask() {
        this.mask=null
        this.createMask=function(){
            var html="";
                html='<p class="mask"></p>';
                document.body.innerHTML+=html;
                   
                // 每一次改变innerHTML之后,都需要重新获取
                btn=document.querySelector('button');    
                btn.onclick=function(){
                    console.log('a')
                    obj.createMask();
                    
                }
        };
    }
    var obj=new Mask();
    btn.onclick=function(){
        console.log('a')
        obj.createMask();
        
    }
怪我咯

mask可以全局就用一个,没必要每次 innerHTML+= 或者 body.appendChild

天蓬老师

试试把
btn = document.querySelector('button');放到点击事件函数里
btn.onclick=function(){
btn = document.querySelector('button');
console.log('a');
obj.createMask();
}

大家讲道理

把onclick函数写进html元素里就可以了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号