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

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

兼容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. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  2. LOJ6303:水题——题解

    https://loj.ac/problem/6303 题目来自LOJ. 就记一个公式,设f(n,k)为n!里分解得到的k(k为质数)的个数,则f(n,k)=f(n/k,k)+n/k. 证明很好证,显 ...

  3. 用ByteArrayOutputStream解决IO流乱码问题

    IO中用ByteArrayOutputStream解决乱码问题 --另一种解决乱码的方法 IO中另外一种防止乱码的方法:使用ByteArrayOutputStream在创建ByteArrayOutpu ...

  4. bnuoj25660 Two Famous Companies

    题目链接:https://www.bnuoj.com/v3/problem_show.php?pid=25660 这个二分真的是烧脑QAQ,想了一晚上才懂了一个大概. 首先,整体思路是二分,直观上感受 ...

  5. Codeforces Round #532 (Div. 2):F. Ivan and Burgers(贪心+异或基)

    F. Ivan and Burgers 题目链接:https://codeforces.com/contest/1100/problem/F 题意: 给出n个数,然后有多个询问,每次回答询问所给出的区 ...

  6. PowerDesigner逆向生成

    人越长大话越少,我们不再说今天受了委屈,不再说谁谁谁不理我了我好难过,不再分享生活中的琐事. 我知道人和人之间没法互相理解,大家都很忙,针也没扎在别人身上. 所以把那些还没说出口的话消化在每一步走过的 ...

  7. Python爬虫学习笔记之模拟登陆并爬去GitHub

    (1)环境准备: 请确保已经安装了requests和lxml库 (2)分析登陆过程:     首先要分析登陆的过程,需要探究后台的登陆请求是怎样发送的,登陆之后又有怎样的处理过程.      如果已经 ...

  8. 增强学习Reinforcement Learning经典算法梳理3:TD方法

    转自:http://blog.csdn.net/songrotek/article/details/51382759 博客地址:http://blog.csdn.net/songrotek/artic ...

  9. DataGridView导出到Word

    #region 使用Interop.Word.dll将DataGridView导出到Word /// <summary> /// 使用Interop.Word.dll将DataGridVi ...

  10. 2017 济南综合班 Day 4

    T1 外星人 二维前缀和 #include<cstdio> #define N 1001 using namespace std; bool v[N][N]; int sum[N][N]; ...