为什么提示总是显示?

为什么提示总是显示?

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>onblur和onfocus</title>

    <style type="text/css">

        .red{

     border:1px solid red;

     }

    </style>

</head>

<body>

姓名:<input type="text"> <span></span>

<script type="text/javascript">

// 补充代码

var t=document.getElementsByTagName('input')[0];

var s=document.getElementsByTagName('span')[0];

t.onfocus=function(){

    if(t.innerHTML==""){

        s.innerHTML='请输入您的姓名';

    }

}

t.onblur=function(){

    if(t.innerHTML==""){

        s.innerHTML='用户名不能为空';

        t.className='red';

    }else{

        s.innerHTML="";

        t.removeAttribute('class');

    }

}

</script>

</body>

</html>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,代码优化如下:

1、input标签中的值是通过value属性获取的,并不是innerHTML属性

2、可以在聚焦的时候清除原有的样式,避免重叠

http://img1.sycdn.imooc.com//climg/5e5fd44709e6713803940451.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • Aurora_Meteor 提问者 #1
    1、如果在onfocus中就清除了样式,在onblur中else部分就不需要清除了对吧?二者作用一样的吧? 2、为什么改变onblur中innerHTML为value就可以了呢?我试了一下,在onblur里面改变以后,把onfocus中的innerHTML改为value没有影响,效果依旧可以实现;但是如果onblur里面还是innerHTML的话,那onfocus里面改不改效果都不会出现,这是为什么?
    2020-03-05 10:16:38
好帮手慕星星 2020-03-05 13:56:11

同学你好,问题解答如下:

1、无论输入框中是否有内容,innerHTML属性值都是空字符串,所以onfocus事件中使用innerHTML属性来判断逻辑上是可以的,但是可能有些不严谨,推荐使用value属性。

2、onfocus事件中添加清除样式主要是清除上一次(红色)的样式。例如第一次聚焦时没有输入内容,失去焦点边框变为红色,再次聚焦的时候颜色就会叠加:

http://img1.sycdn.imooc.com//climg/5e60945d0982175c02120040.jpg

所以才添加的,和onblur事件中添加内容后清除边框样式并不冲突,自己可以测试下。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师