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

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

兼容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>



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

jQuery实现,动态自动定位弹窗。JS分页,Ajax请求的更多相关文章

  1. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  2. Vue.js之Ajax请求

    Vue.js同React.Angular,可以说号称前端三巨头. 前段时间,有个哥们说,Vue.js现在出2.0版本了.可是我现在还是在用1.0的. Vue.js一直都没有好好系统的学习,包括目前公司 ...

  3. leyou_04_vue.js的ajax请求方式

    1.异步查询数据,自然是通过ajax查询,大家首先想起的肯定是jQuery.但jQuery与MVVM的思想不吻合,而且ajax只是jQuery的一小部分.因此不可能为了发起ajax请求而去引用这么大的 ...

  4. jquery getScript动态加载JS方法改进详解[转载]

    转载自http://www.jb51.net/article/31973.htm 有许多朋友需要使用getScript方法动态加载JS,本文将详细介绍此功能的实现方法     $.getScript( ...

  5. jquery getScript动态加载JS方法改进详解

    有许多朋友需要使用getScript方法动态加载JS,本文将详细介绍此功能的实现方法 $.getScript(url,callback) 这个方法是jquery自身提供的一个用于动态加载js的方法.当 ...

  6. JQuery使用deferreds串行多个ajax请求

    使用JQuery对多个ajax请求串行执行. HTML代码: <a href="#">Click me!</a> <div></div&g ...

  7. 原生js发送ajax请求

    堕落了一阵子了,今天打开博客,发现连登录的用户名和密码都不记得了.2016年已过半,不能再这么晃荡下去了. 参加了网易微专业-前端攻城狮 培训,目前进行到大作业开发阶段,感觉举步维艰.但是无论如何,不 ...

  8. js 中ajax请求时设置 http请求头中的x-requestd-with= ajax

    今天发现 AngularJS 框架的$http服务提供的$http.get() /$http.post()的ajax请求中没有带 x-requested-with字段. 这样的话,后端的php 就无法 ...

  9. JQuery 记第N次被坑 - ajax请求字符集问题

    前言:两个功能差不多的页面,都是使用$.post()请求后台,页面A传递到后台的中文参数正常,页面B传递到后台的中文参数则为乱码 分析过程: ①使用chrome的开发者工具,分析两个页面的ajax请求 ...

  10. 用JS实现Ajax请求

    AJAX核心(XMLHttpRequest) 其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象.所有的异步交互都是使用XMLHttpServlet对象完成的. ...

随机推荐

  1. UVA.725 Division (暴力)

    UVA.725 Division (暴力) 题意分析 找出abcdefghij分别是0-9(不得有重复),使得式子abcde/fghij = n. 如果分别枚举每个数字,就会有10^10,肯定爆炸,由 ...

  2. bzoj1483: [HNOI2009]梦幻布丁(链表+启发式合并)

    题目大意:一个序列,两种操作. ①把其中的一种数修改成另一种数 ②询问有多少段不同的数如1 2 2 1为3段(1 / 2 2 / 1). 昨晚的BC的C题和这题很类似,于是现学现写居然过了十分开心. ...

  3. 【状压DP】【P2831】【NOIP2016D2T3】愤怒的小鸟

    传送门 Description Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 $(0,0)$ 处,每次 Kiana 可以用它向第一象限发射一 ...

  4. 一种高效的寻路算法 - B*寻路算法

    在此把这个算法称作B* 寻路算法(Branch Star 分支寻路算法,且与A*对应),本算法适用于游戏中怪物的自动寻路,其效率远远超过A*算法,经过测试,效率是普通A*算法的几十上百倍. 通过引入该 ...

  5. C++派生类继承的理解

    #include<iostream> using namespace std; class Base{ public: Base() { a=; cout<<"Bas ...

  6. sql 建表以及查询---复杂查询之成绩排名

    废话不说,直接建表 1.表Player USE T4st -- 设置当前数据库为T4st,以便访问sysobjects IF EXISTS(SELECT * FROM sysobjects WHERE ...

  7. eclipse好玩的插件集(一) CKEditor插件

    啥也不说,先上效果图: 当你输入完图片的url时,你可以得到预览的图像,从而进行宽高调整! 使用方法: 在eclipse市场中搜索ckeditor 配置操作如下:   进行文件关联,这样就可以直接用c ...

  8. [Luogu 2580] 于是他错误的点名开始了

    [Luogu 2580] 于是他错误的点名开始了 不用好奇我为什么突然发水题题解- 突然觉得自己当年的幼儿园码风太幼稚,就试图把数据结构什么的用指针重写一遍- 想当年因为空间开太大而全 RE,调了一下 ...

  9. 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径

    [题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...

  10. React的单向数据流与组件间的沟通

    今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...