javascript - 重复绑定事件问题
阿神
阿神 2017-04-11 12:49:28
[JavaScript讨论组]

我想在点击一个p后显示边框并且能够改变它的svg子元素中的元素

for(var j=0;j

但问题是当我打开文件第一次点击某个图像时。是可以通过range调整嘴巴的角度,但当我选择另外一个图像时,调整range,两个图像的嘴巴角度都会变化!!
请问这是为什么?绑定事件为什么会重复?新手求助~谢谢

阿神
阿神

闭关修行中......

全部回复(1)
怪我咯

你为同一个元素(mouseSetting)绑定了 n 个 "change" 事件,其实质是为这个元素的 change 事件添加了 n 个处理函数,当这个元素发生改变时,会遍历所有 change 处理函数,依次调用。所以就出现了你看到的现象。

你只需要绑定一个 change 事件处理函数,然后在这个函数里,获取当前人物的嘴巴来改变状态。而当前人物则是由 click 事件设置的,代码大概如下

var current;

for (var j = 0; j < pList.length; j++) {
    (function(el) {
        pList[el].onclick = function() {
            current = pArray[el];
            // gg = pArray[el];//gg为选中的元素的svgdocument
            // init(gg);//将选中的元素传入函数进行修改
        };
    })(j);
}

function init(/*elem*/) {
    var mouthSetting = document.getElementById("mouthSet");
    //mouthsetting为range滚动条的ID
    // var svgMouth = elem.getElementById("mouth");
    //获取svg的某个子元素
    mouthSetting.addEventListener("change", test, false);
    //为range绑定事件

    function test() {
        if (!current) { return; }
        var svgMouse = current.getElementById("mouth");
        svgMouth.setAttribute("d", "M 40 115 Q 60 " + this.value * 150 + " 75 115");
    }
}

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

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