javascript - js事件委托,实现tab切换,初学者轻喷0.0
迷茫
迷茫 2017-04-10 15:36:45
[JavaScript讨论组]

js代码如下

var tablis = document.getElementById('J_tablist').getElementsByTagName('li');
var plis = document.getElementById('J_tab').getElementsByTagName('p');
var tab = document.getElementById('J_tablist');
var t;

function getEvent(event) {
    return event ? event : window.event;
}
function getTarget(event) {
    return event.target || event.srcElement;
}

tab.onmouseover = function () {
    var event = getEvent(event);
    var target = getTarget(event);
    for (var j = 0; j < tablis.length; j++) {
        tablis[j].style.borderBottom = '0';
        plis[j].style.display = 'none';
    }
    clearTimeout(t);
    t = setTimeout(function(){
        switch(target.id) {
            case "tab-a":
            case "tab-b":
                target.style.borderBottom = '3px solid #16afee';
                document.getElementById(target.id+"-s").style.display = 'block';
                break;
            default :
        }

    }, 500);
};

html结构如下

   <p id="J_tab" class="tab">
        <ul class="tablist clearfix" id="J_tablist" style="width: 170px;">
            <li id="tab-a" style="border-bottom: 3px solid rgb(22,175,238);">投资记录</li>
            <li id="tab-b">回款计划</li>
        </ul>
        <p id="tab-a-s" style="display: block;"></p>
        <p id="tab-b-s" style="display: none;">
    </p>

点击ul中空白的时候下面的p就display:none了,怎样写switch中的default语句才能让他保持上一个状态?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
PHP中文网

既然你想要保持某个状态,那就用一个变量来记录当前选中的状态吧。稍微修改一下你的JS代码如下(修改的地方我会注释):

javascriptvar tablis = document.getElementById('J_tablist').getElementsByTagName('li');
var plis = document.getElementById('J_tab').getElementsByTagName('p');
var tab = document.getElementById('J_tablist');
var curTarget;    //这里声明了一个变量来保存当前选中的状态,我这里要保存的当前选中的LI的ID
var t;

function getEvent(event) {
  return event ? event : window.event;
}
function getTarget(event) {
  return event.target || event.srcElement;
}

// 下面这个函数用了addEventListener方法,跟你的差不多
tab.addEventListener('mouseover',function (e) {
  var event = getEvent(event);
  var target = getTarget(event);
  // 下面这段是事件委托的核心代码,你要保证鼠标hover的是在LI上面
  if ( target && target.nodeName.toUpperCase() == 'LI' ) {
    // 下面这段就是你要的保存状态的语句了,如果你hover的是当前选中态的,那就直接不执行后面的语句,达到保持原来的状态
    if ( target.id === curTarget ) {
      return false;
    }

    for (var j = 0; j < tablis.length; j++) {
      tablis[j].style.borderBottom = '0';
      plis[j].style.display = 'none';
    }

    clearTimeout(t);
    t = setTimeout(function(){
      switch(target.id) {
        case "tab-a":
        case "tab-b":
           target.style.borderBottom = '3px solid #16afee';
           document.getElementById(target.id+"-s").style.display = 'block';
           curTarget = target.id;
           break;
       default :
      }
    }, 0);
  }
});

如果你是初学JS的话,建议看《javascript高级程序设计-第三版》,很好的一本书~

ringa_lee

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

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