【JavaScript】input提示弹出框

一、先设计出提示框的样式,给出以下注意点:

  1. width: max-content; //提示框宽度可跟随文字的数量自动变化
    我尝试过使用 width: fit-content; 在Chrome浏览器中也可以生效,但是使用Firefox(火狐)浏览器却不生效。

  2. top: -32px; //我设定的提示框出现在input框的上方。
    bottom 是出现在下方,left 出现在左侧,right 出现在右侧。

  3. border-color: #082666 transparent transparent transparent; //提示框箭头
    遵循上右下左原则,箭头与位置相反。#082666在第一位是下箭头,在第二位是左箭头,在第三位是右箭头,在第四位是上箭头。

<!-- 动态提示框样式 -->
<style>
	.defaultTipBox{
		display: inline-block;
		width: max-content;
		height: 22px;
		line-height: 22px;
		padding: 0 5px;
		background-color: #4585b1;
		border-radius: 5px;
		border: 1px solid #082666;
		position: absolute;
		left: 50%;
		/* bottom: -32px; */
		top: -32px;
		transform: translateX(-50%);
		text-align: center;
		font-size: 12px;
		color: #fff;
		z-index: 99999;
	}
	.defaultTipBox::before{
		content: '';
		display: block;
		border: 8px solid #082666;
		/* border-color: transparent transparent #082666 transparent; */
		border-color: #082666 transparent transparent transparent;
		position: absolute;
		left: 50%;
		/* bottom: 23px; */
		top: 23px;
		transform: translateX(-50%);
	}
	.defaultTipBox::after{
		content: '';
		display: block;
		border: 8px solid #4585b1;
		/* border-color: transparent transparent #4585b1 transparent; */
		border-color: #4585b1 transparent transparent transparent;
		position: absolute;
		left: 50%;
		/* bottom: 22px; */
		top: 22px;
		transform: translateX(-50%);
		z-index: 1;
	}
</style>

二、选择需要提示框的input,给id名或class名

按照以下input框(此处用的id名)为例,由于会有多个提示框,以表格的方式体现:

<!-- 此处为了方便查看,该body标签可删除 -->
<body style="margin-top: 100px;">
    <table>
        <tr>
            <th><font color="#FF0000">问题编号*</font></th>
            <td><input name="WTBH" id="WTBH" type="text" /></td>
        </tr>
    </table>    
</body>

三、给input框加入鼠标经过、离开事件

调用该方法后,效果图如下:
在这里插入图片描述
代码如下:

<script>
	// 动态提示框方法
	// defaultTipContent( parameterName, defaultVaule)
	// parameterName : 参数名称(可以是类名[.className]也可以是ID名称[#idName])
	// defaultVaule : 默认值(提示框的内容)
	function defaultTipContent( parameterName, defaultVaule){
		var ipt = '';
        if( document.querySelector(parameterName) == null){
			// console.log('页面内没有该参数名:'+ parameterName);
			return;
		}else{
			ipt = document.querySelector(parameterName);
			var parent = ipt.parentElement;
			var span = document.createElement('span');

			parent.addEventListener('mouseover', function(){
				parent.appendChild(span);
				parent.style.position = 'relative'

				span.className = 'defaultTipBox';
				span.innerHTML = defaultVaule;
			})

			parent.addEventListener('mouseleave', function(){
				// 如果不加if条件,可能会导致其他标签被移除
				if(parent.style.position == 'relative'){
					parent.removeChild(parent.children[parent.children.length-1]);
					parent.style.position = 'static'
				}
			})
		}
    }
    //调用defaultTipContent方法
	defaultTipContent( '#WTBH', '系统自动生成,无需更改' );
</script>

若只需要应用于部分提示框,以上步骤即可完成。

四、若需要应用的提示框过多,想要方便后期维护,可以把所有提示框信息存在一个数据表里,根据不同页面名称挑选不同的提示框

此处用了3个必要字段:
SJXMC:对应的页面名称。
SJXZD:对应的ID名或class名(此处用的ID名)
SJXValue:提示框内容

<script>
// (不同页面挑选自己页面所需的弹出框)调用动态提示框方法
	<!-- defaultTipFun( param ) -->
	<!-- param : 页面名称 -->
	function defaultTipFun(param){
		$.ajax({
			//数据源地址(用于存储所有的弹出框信息)
			url: '${pageContext.request.contextPath}/${systemName}${resourceURL}/viewdata?datasourceId=8ac86aa184a5f05a0184a963f87c0008',
			dataType: "JSON",
			type: "GET",
			data: {
				SJXMC: param,  //数据项名称(对应该页面名称)
			},
			success: function(result) {
				// console.log(result.rows);

				var test = result.rows;
				// 在所有弹出框信息中挑选该页面所需要
				for(var i=0; i<test.length; i++){
					// SJXZD:input的ID名(此处用的"#WTBH")  SJXValue:提示框的默认值(此处用的"系统自动生成,无需更改")
					defaultTipContent('#'+test[i].SJXZD, test[i].SJXValue);
				}
			},
			error: function(e){
				console.log(e);
			}
		});
	}
	// 调用该方法可注释掉 defaultTipContent() 方法
	defaultTipFun('问题管理页面'); //SJXMC的值为"问题管理页面"
</script>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值