javascript - 给元素添加点击事件,打开页面就直接执行了回调函数,未点击。
伊谢尔伦
伊谢尔伦 2017-04-10 15:37:55
[JavaScript讨论组]

一个上课做的demo,通过js来控制元素样式。

点击'点击设置'后的效果

以下是源码:

window.onload = function() {
    function $(id) {
        return document.getElementById(id);
    }

    var $_click = function (element,listener) {
        element.addEventListener('click',listener,false);
    };

    var setcss = $('btn_set'),
        reset = $('btn_reset'),
        close = $('btn_close'),
        chose = $('chose'),
        pcss = $('pcss'),
        btn_red = $('btn_red'),
        btn_green = $('btn_green'),
        btn_blue = $('btn_blue');

    //setcss.addEventListener('click',openMask,false);  
    $_click(setcss,openMask);
    $_click(close,closeM);

    //$_click(btn_red,setCss('background-color','red')); 
    // $('btn_red').onclick  = function () {
    //  pcss.style.background = 'red';
    // }


    function openMask(){
        chose.style.display = "block";
        var sWidth=document.body.scrollWidth;
        var sHeight=document.body.scrollHeight;
        var oMask=document.createElement("p");
            oMask.id="mask";
            oMask.style.height=sHeight+"px";
            oMask.style.width=sWidth+"px";
            document.body.appendChild(oMask);
    }

    function closeM() {
        chose.style.display = "none";
        var oMask = $('mask');
        document.body.removeChild(oMask);
    }

    function setCss(attr,value) {
        if (typeof value == 'number') {
            pcss.style[attr] = value + 'px';
        } else {
            pcss.style[attr] = value;
        }
    }
}

当这段code取消注释

//$_click(btn_red,setCss('background-color','red'));

页面加载后p直接改变了颜色 未触发点击事件

点击事件未发生函数就执行了,觉得是回调函数的影响。

当直接添加click事件操作样式正常。

$('btn_red').onclick  = function () {
        pcss.style.background = 'red';
    }

请问各位大大这是什么原因。是因为传入的函数不是引用,而是相当于调用吗?造成的影响。

补充一下全部源码 http://codepen.io/zzzJH/pen/bdzBbZ
位于js中23-27

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
迷茫

你的意思是要这样的效果么?
$_click(btn_red,function(){setCss('background-color','red')});

$_click(btn_red,setCss('background-color','red'));
这样写就是调用了函数,把结果当成了第二个参数的值,按照你setCss函数的写法,没有return,这地方相当于传了一个undefined。

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

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