jQuery实现,动态自动定位弹窗。JS分页,Ajax请求

工作中碰到一个问题,一个页面中碰到多个地方需要弹窗数据。

网上找了一圈,没有找到合适的,所以自己写了一个。

兼容IE7+,chrome。其它未测试。

需求:点击任意的输入框(也可其它元素,代码中有注释),在输入框下,出现弹窗。出现我需要的数据

效果:

窗口1


窗口2



代码如下:


<style type="text/css">
#on_select{
<span style="white-space:pre">	</span> visibility:hidden;/*初始隐藏*/
<span style="white-space:pre">	</span> width: 350px;
<span style="white-space:pre">	</span> height: 280px;
<span style="white-space:pre">	</span> position: absolute;
<span style="white-space:pre">	</span> z-index: 200;
<span style="white-space:pre">	</span> background-color: white;
<span style="white-space:pre">	</span> color: black;
<span style="white-space:pre">	</span> border: 1px solid #2b8fce;
<span style="white-space:pre">	</span> top:0px;
<span style="white-space:pre">	</span> left: 0px;
}
#on_select ul{
<span style="white-space:pre">	</span>list-style:none; /* 去掉ul前面的符号 */
    margin: 0px; /* 与外界元素的距离为0 */
    padding: 0px; /* 与内部元素的距离为0 */
    width: 100%; /* 宽度根据元素内容调整 */
}
#on_select ul li
{
    float:left; /* 向左漂移,将竖排变为横排 */
    cursor: pointer;
}
#div_ul1{
background-color: #2b8fce;
height: 30px;
}
#div_ul1 li{
<span style="white-space:pre">	</span>height: 25px;
<span style="white-space:pre">	</span>padding-top: 5px;
<span style="white-space:pre">	</span>width: 20%;
<span style="white-space:pre">	</span>color:#e6f9ff;
}
#div_ul2 li{
<span style="white-space:pre">	</span>width: 100px;
<span style="white-space:pre">	</span>font-size: 12px;
<span style="white-space:pre">	</span>color: #666;
<span style="white-space:pre">	</span>height: 25px;
<span style="white-space:pre">	</span>padding-left:10px;
<span style="white-space:pre">	</span>text-align: left;
}
<pre name="code" class="html"><style>

<div id="on_select"> 
				<div style="height: 25px;padding-top: 5px;background-color:#eef1f8;"><a style="cursor: pointer;" onclick="hd()">关闭</a></div>
					<ul id="div_ul1">
						<li onclick="changeul2(this)" id="li1" value="1">A-E</li>
						<li onclick="changeul2(this)" value="2">F-J</li>
						<li onclick="changeul2(this)" value="3">K-O</li>
						<li onclick="changeul2(this)" value="4">P-T</li>
						<li onclick="changeul2(this)" value="5">U-Z</li>
					</ul>
				<div style="height: 2px;width: 100%;background-color:#66c8e8;display: block;"></div>
					<ul id="div_ul2">
					</ul>
				</div>//此段代码,必须写在body标签中
<pre name="code" class="html"><script type="text/javascript">
					var ctpage;//当前页
					var allpage;//总页数
					var size=24;//大小
					var s;//总数
					var ctclick;//当前被点击的输入框,因为多个输入框使用。所以需要记录
					/* var tab=$("#table_3");//用于IE浏览器
					var version = $.browser.version;//用于IE浏览器 */
					$("#mainMine").click(function(){/* 设置需要弹窗的输入框,当然可以选其它你需要作为弹窗点的元素 */
						changeValue(document.getElementById("mainMine"));
					});
					$("#otherMainMine").click(function(){/* 设置第二个弹窗点 */
						changeValue(document.getElementById("otherMainMine"));
					});
										<pre name="code" class="html"><span style="white-space:pre">					</span>/* 多个地方需要,如上,多设置几个 */
</pre>					function changeValue(vid){//调用此函数,出现弹窗
<span style="white-space:pre">						</span>ctclick=vid;changeRect();
<span style="white-space:pre">						</span>}
<span style="white-space:pre">					</span>function changeRect(){ //设置选择框的位置和数据
<span style="white-space:pre">						</span>var d=document.getElementById("li1");//获取第一个类别
<span style="white-space:pre">						</span>changeul2(d);//设置默认页面
<span style="white-space:pre">						</span>$("#on_select").css("visibility","visible");//选择框设置为显示
<span style="white-space:pre">							</span>$("#on_select").css("top",$(ctclick).offset().top+$(ctclick).height());
<span style="white-space:pre">								</span>/*<span style="font-family: Arial, Helvetica, sans-serif;">$(ctclick).offset().top获取需要弹窗元素距离最外层父元素顶部的绝对距离</span><span style="font-family: Arial, Helvetica, sans-serif;">*/</span>
								$("#on_select").css("left",$(ctclick).offset().left);
<pre name="code" class="html"><span style="white-space:pre">								</span>/*<span style="font-family: Arial, Helvetica, sans-serif;">$(ctclick).offset().left获取需要弹窗元素距离最外层父元素左边的绝对距离</span><span style="font-family: Arial, Helvetica, sans-serif;">*/</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html">						}; 
					/*到此实现弹窗*/
					$("#on_select").mouseleave(function(){//鼠标离开弹窗效果
						$("#on_select").css("visibility","hidden");
					});
					
					/* 改变div_ul2里面的值 */
					function changeul2(u){
							ctpage=1;//设置初始第一页
							$("#div_ul1").children().css("background-color", "transparent").css("color","#e6f9ff");//设置所以选择项背景为透明
							$(u).css("background-color","#66c8e8").css("color","white").css("font-weight","bold");//设置当前选择项背景颜色
								$.ajax({
									url:"getCatalog.action?CatalogId="+u.value,
									async:false,
									success:function(data){
										s=data.split(",");//解析数据
										allpage=parseInt((s.length-1)/size+1);//设置总页数
										$("#div_ul2").empty();
										for(var i=(ctpage-1)*size;i<ctpage*size;i++)
											{
										 $("#div_ul2").append("<li onclick='changeMM(this)'>"+s[i]+"</li>");
											}
										$("#div_ul2").append("<div id='page_div'><a>上一页</a>   |   <a class='next' onclick='changepage("+(ctpage+1)+")'>下一页</a></div>");
										
									}
								});
								
					}
					//分页显示
					function changepage(page){
						var sn=page*size;//当前页显示数组中的哪些数据
						if(page==allpage && (s.length-(page-1)*size)<size){//判断是不是最后一页
							sn=s.length;
						}
						$("#div_ul2").empty();
						for(var i=(page-1)*size;i<sn;i++)//动态加入上一页,下一页,首页上页不可点击。尾页一样
							{
						 $("#div_ul2").append("<li onclick='changeMM(this)'>"+s[i]+"</li>");
							}
						if(page==1){
							$("#div_ul2").append("<div id='page_div'><a>上一页</a>   |   <a class='next' onclick='changepage("+(page+1)+")'>下一页</a></div>");
						}else if(page==allpage){
							//alert(page==allpage);
							$("#div_ul2").append("<div id='page_div'><a class='back' onclick='changepage("+(page-1)+")'>上一页</a>   |   <a>下一页</a></div>");
						}else {
							$("#div_ul2").append("<div id='page_div'><a class='back' onclick='changepage("+(page-1)+")'>上一页</a>   |   <a class='next' onclick='changepage("+(page+1)+")'>下一页</a></div>");
						}
					}
					function changeMM(ipt){//设置输入框里面的值
						$(ctclick).empty();//清空数据
						$(ctclick).val(ipt.innerText);//重填数据
						if(ctclick!=document.getElementById("mainMine")){
							$("#on_select").css("visibility","hidden");
							return ;
						}



<script>





版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2014-12-16 23:33  黑衣帽子  阅读(538)  评论(0编辑  收藏  举报