为什么焦点点击和离开都是“请输入姓名”

为什么焦点点击和离开都是“请输入姓名”

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>onblur和onfocus</title>
<style type="text/css">
.red{
border:1px solid red;
}
</style>
</head>
<body>
<div>
姓名:<input type="text"> <span></span>
</div>
<script type="text/javascript">
var kuan=document.getElementsByTagName('input');
kuan[0].onfocus=function(){
var x =document.getElementsByTagName('div');
x[0].innerHTML="姓名:<input type='text'> <span>请输入姓名</span>";
}
kuan[0].onblur=function(){
var x =document.getElementsByTagName('div');
x[0].innerHTML="姓名:<input type='text'> <span>用户名不能为空</span>";
}
</script>
</body>
</html>


正在回答

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

2回答

​同学你好,对于你的问题解答如下:

1、“在onfocus事件函数中,通过innerHTML属性重新设置了div元素里面的内容,无法给新添加的元素绑定事件”这句话的意思是:新添加的input元素,无法再次绑定onfous和onblur事件。

2、span更改了两次是因为:第一次触发输入框的聚焦事件,更改了div里面的内容,显示“请输入姓名”,由于更改了div里面的内容,会触发原来输入框的失焦事件,所以会再次更改div里面内容,显示“用户名不能为空”。

由第一条可知,新添加的input元素,无法再次绑定onfous和onblur事件,所以输入框再次聚焦和失焦都不会发生任何改变了。

3、因为getElementsByTagName方法是动态获取元素的,所以把div的内容改写了,前面的var kuan=document.getElementsByTagName('input');依然有效,可以正确获取到替换后的input元素。但是代码是按着从上到下的顺序执行,无法再次执行给新元素绑定onfocus和onblur事件的代码,所以无法实现效果

祝学习愉快~

好帮手慕慕子 2021-09-18 17:25:32

同学你好,因为在onfocus事件函数中,通过innerHTML属性重新设置了div元素里面的内容,无法给新添加的元素绑定事件,所以无法实现效果。

建议修改:获取span元素,并设置innerHTML属性即可,另外,可以通过css消除输入框默认的选中样式,然后添加判断,通过添加和删除类名设置边框颜色

https://img1.sycdn.imooc.com//climg/6145b08a09ad135710960738.jpg

https://img1.sycdn.imooc.com//climg/6145b0080919429104500147.jpg

祝学习愉快~



  • 提问者 localhost999 #1

    老师,在onfocus事件函数中,通过innerHTML属性重新设置了div元素里面的内容,无法给新添加的元素绑定事件,这里意思有点不懂,是指innerHTML更改过一次之后,别的就不能绑定它了?

    2021-09-18 18:54:36
  • 提问者 localhost999 #2

    但是span不也是更改了2次吗?第一次更改span的innerHTML内容后,后面为什么又可以改呢?是仅仅指新添加的不能添加元素绑定但是可以多次修改里面内容么

    2021-09-18 18:59:12
  • 提问者 localhost999 #3

    ​是后面把div整个改写了,导致前面的var kuan=document.getElementsByTagName('input');无效了吗?

    2021-09-18 19:11:17
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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