javascript - 为什么表格里这样写的的事件委托没效果?
PHP中文网
PHP中文网 2017-04-11 12:36:15
[JavaScript讨论组]

为什么表格里这样写的的事件委托没效果?
效果如下:


JS代码如下:

window.onload=function () {

        var tab=document.getElementById('tab');
        var oBnt=document.getElementById('btn');

        var oUser=document.getElementById('user');
        var oAge=document.getElementById('age');
        var id=tab.tBodies[0].rows.length+1;

function mHover() {

           for(var i=0;i

*用上面的方法是可以实现效果的,但在优化性能上不可取,如果用下面的方法却实现不了效果,这是为什么?哪位大神可以帮帮小白我!谢谢(>.<*)
PS:我在这里参考事件委托的:http://www.cnblogs.com/liugan...**

window.onload=function () {

        var tab=document.getElementById('tab');
        var oBnt=document.getElementById('btn');

        var oUser=document.getElementById('user');
        var oAge=document.getElementById('age');
        var id=tab.tBodies[0].rows.length+1;

        tab.tBodies[0].onmouseover=function (ev) {
            var ev=ev||window.event;
            var target=ev.target||ev.srcElement;
             if(target.nodeName.toLowerCase()=='tr'){
                 target.style.backgroundColor='red';
             }
        };

        tab.tBodies[0].onmouseout=function (ev) {
            var ev=ev||window.event;
            var target=ev.target||ev.srcElement;
            if(target.nodeName.toLowerCase()=='tr'){
                target.style.backgroundColor='#fff';
            }
        };
        oBnt.onclick=function () {
            var oTr=document.createElement('tr');

            var oTd=document.createElement('td');
            oTd.innerHTML=id++;
            oTr.appendChild(oTd);

            var oTd=document.createElement('td');
            oTd.innerHTML=oUser.value;
            oTr.appendChild(oTd);

            var oTd=document.createElement('td');
            oTd.innerHTML=oAge.value;
            oTr.appendChild(oTd);

            var oTd=document.createElement('td');
            oTd.innerHTML='删除';
            oTr.appendChild(oTd);

            oTd.getElementsByTagName('a')[0].onclick=function () {
                tab.tBodies[0].removeChild(this.parentNode.parentNode);
            };

            tab.tBodies[0].appendChild(oTr);

        };
    };
PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
大家讲道理

function mHover(){

    tab.tBodies[0].onmouseover=function (ev) {
        var ev=ev||window.event;
        var target=ev.target||ev.srcElement;
        var tr=target.parentNode.nodeName;
            if(tr.toLowerCase()=='tr'){
                target.parentNode.style.backgroundColor='red';
        }
    };

    tab.tBodies[0].onmouseout=function (ev) {
        var ev=ev||window.event;
        var target=ev.target||ev.srcElement;
        if(target.parentNode.nodeName.toLowerCase()=='tr'){
            target.parentNode.style.backgroundColor='#fff';
        }
    };
};

改成target.parentNode.nodeName 指向tr

PHP中文网
var oTd=document.createElement('td');

这个干嘛要重复写。。循环去哪里了。

怪我咯

楼主,直接写成 tab.onmouseover=function(ev),就可以了,不要去管body,同时判断的时候用td或者th,不要用tr

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

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