当前位置: 代码迷 >> Web前端 >> 点击列表某个字段的链接,在当前页弹出一个窗口展示详细信息
  详细解决方案

点击列表某个字段的链接,在当前页弹出一个窗口展示详细信息

热度:125   发布时间:2012-11-14 10:12:18.0
点击列表某个字段的链接,在当前页弹出一个窗口显示详细信息
首先先贴页面的代码吧
<link href="../css/core.css" type="text/css" rel="stylesheet"/>//弹窗的样式
<script src="../js/popup_layer.js" type="text/javascript" ></script>//调用弹窗的js控制
<script type="text/javascript" src="../js/jquery-1.4.2.js" ></script>//有用到jquery

<script type="text/javascript">
function clickA(e) {
//e表示传入的对象
        var el = e;    //这样赋值主要是防止e的值被修改了
        var et = e;
        var elW = el.offsetWidth;  //获取对应控件的宽度

        eLeft = el.offsetLeft;   //获取该控件相对左边位置
        /*       offsetLeft是相对父层的位置,如果要取窗口的,则需要一直往上            */  
        while (el.offsetParent != null) {
            eParent = el.offsetParent
            eLeft += eParent.offsetLeft
            el = eParent
        }
        
        
        //同上
        eTop = et.offsetTop;
        while (et.offsetParent != null) {
            eParent = et.offsetParent
            eTop += eParent.offsetTop  // Add parent top position
            et = eParent
        }
/******************以上代码暂时用不到,后面会解释************************/
        var ctlid = e.id; //获取该控件的id,记住是小写
        new PopupLayer({ trigger: "#" + ctlid, popupBlk: "#blk2", closeBtn: "#close2",
                offsets: {
                x: eLeft + elW,
                    y: -41
                }
            });        
 //上面这个是调用别人写的弹窗,参数说明下
/*
trigger 控件的 id/以及标签,例如a标签就写个a,记住这边都是用jquery来写的
popupBlk 要显示控件的id
closeBtn 关闭窗口的a标签控件id,这个不要修改,参考下面
offsets 定义x,y坐标. x指定离所要点击列的横向左边, y坐标在js已经写好了。
*/
/**这边又有奇怪现象,要说说下
当指定列表(gridView)其中一个字段为a标签,那么生成的时候多个a,但是id是一样的,如果指定trigger是id的话,那么只有第一个a标签可以看见详细信息。
所以一定要指定为标签,写上a即可,那么所有选中a标签的都可以弹出来了,但是弹出窗口位置始终在一个地方,那么最上面代码就有用了,将其循环,这样y坐标就动态了。
**/
            //var CustId = e.custid;
            var CustId = e.attributes["custid"].nodeValue; //为了兼容谷歌等
/*上面这个也很有意思,其实该标签并没有custid这个属性,我开始时是用Title,其实asp:LinkButton是没有这个属性的,应该是叫ToolTip,但是运行后会变成a标签,a标签是有Title的,所以可以加,但是如果你两个一起加,那么以ToolTip为主,Title就会失效。
原来是想传递主键用个属性来,鼠标移上去提示名称,结果发现属性不够用,于是就随便把custid拿去试用下,发现竟然可以,不过谷歌不行,于是采用第二种,二者都兼容了。
*/
//用到了jquery的ajax方法,指定需要返回数据的页面,其他照抄吧,对这目前研究很少。
        $(".ajax.load").load("../Association/CustInfo.aspx?CustId=" + CustId,
		function(responseText, textStatus, XMLHttpRequest) {
		    this;
		})
		return false;
    }
</script>


<asp:TemplateField HeaderText="客户名称">
    <ItemTemplate>
   <%-- <button title='<%#Eval("CustId") %>' id="btnload" ><%#Eval("CustName") %></button>--%>
   <asp:LinkButton ID="btnload" custid='<%#Eval("CustId") %>' runat="server" OnClientClick="return clickA(this);return false;"  ToolTip='<%#Eval("CustName") %>' CssClass="content" ><%#Eval("CustName") %></asp:LinkButton>
     <%-- <a href="javascript:clickA()" title='<%#Eval("CustId") %>' id="btnload" ><%#Eval("CustName") %></a>--%>
    </ItemTemplate>
</asp:TemplateField>
/*  form之前写以下代码      */
<div id="blk2" class="blk" style="display:none;">
            <div class="head"><div class="head-right"></div></div>
            <div class="main">
                <a href="javascript:void(0)" id="close2" class="closeBtn">关闭</a>
                <label id="show" class="ajax load"></label> //这句是显示返回的数据的,目前不明白为什么 class里面写 ajax load就能接收到数据
            </div>
            <div class="foot"><div class="foot-right"></div></div>
        </div>