f_alert 在指定元素后面弹出错误信息

本文介绍了一种在不同浏览器中获取指定HTML元素坐标的方法,并实现了一个基于该坐标的错误信息弹窗功能。该功能能够计算元素的绝对位置,并在元素附近显示提示信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">

 
  
 </HEAD>

 <BODY>
	<input type="text" id="txt"   />sssssssssssssssssssssss
	<input type="text" id="txt5"   /><input type="text" id="txt33"   /><br/>
	<input type="text" id="txt6"   /><br/><br/><br/>
	<input type="text" id="txt2"   /> 
	 <select id="sss" >
		<option>sssssssss</option>
	 </select>
	<br/><br/>
	<input type="checkbox" name="chk" id="chk" />sdfsf

	<SCRIPT LANGUAGE="JavaScript">
		
		/**
		 * 获取元素的坐标点
		 * @param elementId 元素Id
		 * @returns 元素所在位置的坐标点
		 */	
		function getElementPos(elementId){
			
			//验证浏览器类型
			var ua = navigator.userAgent.toLowerCase(); 
			var isOpera = (ua.indexOf('opera')!=-1); 
			var isIE = (ua.indexOf('msie')!=-1&&!isOpera);
		
			
			//获取元素
			var el = document.getElementById(elementId); 
			if(el.parentNode === null || el.style.display == 'none') { 
				return false; 
			}
 
			var parent=null; 
			var pos=[]; 
			var box;
			

			//如果浏览器是IE
			if(el.getBoundingClientRect) {
				
				box = el.getBoundingClientRect(); 

				var scrollTop  = Math.max(document.documentElement.scrollTop,document.body.scrollTop); 
				var scrollLeft = Math.max(document.documentElement.scrollLeft,document.body.scrollLeft);
				
				return {
					x:box.left+scrollLeft,y:box.top+scrollTop
				}; 
			} else if(document.getBoxObjectFor) {  // gecko  
				
				box=document.getBoxObjectFor(el); 

				var borderLeft=(el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
				var borderTop=(el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
				
				pos=[box.x-borderLeft,box.y-borderTop];
			}else{	// safari & opera
			 
				pos=[el.offsetLeft,el.offsetTop]; 
				parent=el.offsetParent; 

				if(parent!=el){
					while(parent){
						
						pos[0]+=parent.offsetLeft;
						pos[1]+=parent.offsetTop;
						parent=parent.offsetParent;
					}
				}

				if(ua.indexOf('opera')!=-1||(ua.indexOf('safari')!=-1&&el.style.position=='absolute')){
					
					pos[0]-=document.body.offsetLeft;
					pos[1]-=document.body.offsetTop;
				}
			}


			if(el.parentNode){
				parent=el.parentNode;
			}else {
				parent=null;
			}


			while(parent&&parent.tagName!='BODY'&&parent.tagName!='HTML'){
				// account for any scrolled ancestors   
				pos[0]-=parent.scrollLeft;
				pos[1]-=parent.scrollTop;
				
				if(parent.parentNode){
					parent=parent.parentNode;
				}else {
					parent=null; 
				} 
			}
			return {
				x:pos[0],y:pos[1]
			};
		}
	
		
		/**
		 * 弹出错误信息
		 * @param elementId 元素Id
		 * @param errorMsg 错误信息
		 * @returns 元素所在位置的坐标点
		 */	
		function f_alert(elementId , errorMsg){
			//获取元素、元素类型
			var _el = document.getElementById(elementId);
			var _el_type = _el.type ;
			 
			//计算元素宽度
			var _el_width = 0 ;
			if(_el_type == "text") {
				_el_width = _el.size ;
			}else {
				_el_width = _el.style.width ;  
			}

			//获取元素坐标
			var _point = getElementPos(elementId); 

			//计算div显示位置
			var _left = parseInt(_el_width) * 8 + _point.x - 8 ;
			var _top = _point.y - 3  ;
			
			//拼出DIV
			var _strDiv = "<div  onclick='javascript:{this.style.display=\"none\";}' "
			_strDiv += "style='color: red ;background-color: #FFFEBB;position: absolute;font-size: 12px;height: 22px;";
			_strDiv += "border: 1px solid #ff3300;padding-top: 4px;padding-left: 4px;padding-right: 4px;z-index: 1002;overflow: auto;";
			_strDiv += "left:"+_left+"px;top:"+_top+"px;' >"
			_strDiv += errorMsg ;
			_strDiv += "</div>" ;

			document.write(_strDiv);

		}

			 
		f_alert("txt5","aaaaaaaaa");
		//f_alert("txt5","请输入嗷嗷嗷");
		//f_alert("chk","aaaaaaaaa");

  //-->
  </SCRIPT>
 </BODY>
</HTML>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值