浏览器密码框明文密文兼容edge的问题

在网页中注册会员的时候,经常需要输入用户名(账号)和密码,在输入密码的时候,为了防止用户输错密码,经常会给密码框加一个小功能,就是点击密码框右侧闭着的小眼睛,可以让密文变成明文,同时眼睛是睁开的。用户确认密码无误后,再次点击可变成密文,图片又变成闭着的眼睛,效果 如图所示。

下面是本例中用到的两张眼睛的图片。

这个功能的实现思路是改变密码框的type属性,明文为text,密文为password,最开始是这样实现的:

javascript 复制代码
<script type="text/javascript">
	var eye = document.getElementById('eyes')
	var pwd = document.getElementById('pwds')
	eye.onclick = function() {
	  if (pwd.type == "text") {
		pwd.type = 'password'
		eye.src = './images/close.png'
	  } else {
		pwd.type = 'text'
		eye.src = './images/open.png'
	  }
   }
</script>

上面代码在谷歌、safari浏览器上运行没有问题,但是在edge浏览器运行时,edge浏览器自带这个功能,所以会同时出现两张眼睛的图片,如图所示。

所以需要添加是否是edge浏览器的判断代码,使用navigator.userAgent属性进行判断。

javascript 复制代码
navigator.userAgent.indexOf("Edg") == -1

我们把图片初始状态设置为不可见,如果navigator.userAgent.indexOf("Edg")值为-1,说明不是Edge浏览器,这时我们再让图片显示,执行我们写的script代码。

完整的代码如下:

html 复制代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>显示隐藏密码</title>
		<style type="text/css">
			.box {
				position: relative;
				width: 400px;
				margin: 100px auto;
			}

			.box input {
				width: 330px;
				height: 30px;
				border: 1px solid #ccc;
				outline: none;
			}

			.box img {
				position: absolute;
				top: 5px;
				right: 30px;
				width: 24px;
				cursor: pointer;
				display: none;
				/*初始状态不可见*/
			}
		</style>
	</head>
	<body>
		<div class="box">
			<label for="pwds">密码:</label>
			<img src="./images/close.png" id="eyes">
			<input type="password" id="pwds" />
		</div>
		<script>
			//判断不是Edge浏览器再执行下面的代码
			if (navigator.userAgent.indexOf("Edg") == -1) {
				var pwd = document.querySelector("#pwds")
				var eye = document.querySelector("#eyes")
				eye.style.display = 'block'
				eye.onclick = function() {
					if (pwd.type == "text") {
						pwd.type = 'password'
						eye.src = './images/close.png'
					} else {
						pwd.type = 'text'
						eye.src = './images/open.png'
					}
				}
			}
		</script>
	</body>
</html>
相关推荐
To_OC2 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic2 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy2 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志3 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble4 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯5 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜5 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司5 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
江华森6 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒7 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端