带母版页的Jquery弹出层弹不出来了,请教!

zznice 2013-05-19 05:25:59
 
$("#phonetype").click(function () {
$.layer({
type: 2,
title: ['机型选择', false],
iframe: { src: '1.aspx' },
area: ['980px', '500px'],
offset: ['80px', '20%'],
closeBtn: [0, true],
shadeClose: true
});
})

以上代码放在B.aspx页面,运行正常,可以弹出层,也可以正常操作
当把B.aspx加入到母版页A.master后,就不能正常工作了,点击以后没有反应,请问是怎么回事

B页面移入母版页后,jquery-1.9.1.min.js,jquery-ui-1.8.20.custom.min.js,layer.min.js三个文件也移到母版页了
...全文
195 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zznice 2013-05-22
  • 打赏
  • 举报
回复
再次感谢两位版主的热心解答,谢谢!
zznice 2013-05-22
  • 打赏
  • 举报
回复
问题解决了,相信还会有很多人会遇到这个问题,现将解决方法分享出来,供大家参考,这个是微软的问题,具体的说是.net加载母版页后,服务器控件加载到客户端后,ID会改变,造成JS取到的值与后台控件设定的ID不一致,网上有三种方法解决,如楼上几位版主所述的方法,如注册下服务器控件,如在JS按服务生成ID的规则拼接ID等,但都有各自的缺点,微软可能也发现了这个问题,所以在在ASP.NET 4.0中的每个控件上都多了一个叫做ClientIDMode的属性,这就是解决上面获取控件ID难的解决方案。这个属性有四个可选值,根据所选值的不同它可以控制页面上生成控件的ID格式。 现在我们可以通过设置控件的ClientIDMode修改clientId的输出形式,例如下面代码: [code=csharp <asp:TextBox ID="txtPredictable" runat="server" ClientIDMode="Predictable"></asp:TextBox> <asp:TextBox ID="txtAutoID" runat="server" ClientIDMode="AutoID"></asp:TextBox> <asp:TextBox ID="txtInherit" runat="server" ClientIDMode="Inherit"></asp:TextBox> <asp:TextBox ID="txtStatic" runat="server" ClientIDMode="Static"></asp:TextBox> [/code] 将分别输出

<input name="ctl00$MainContent$txtPredictable" type="text" id="MainContent_txtPredictable" /> 
    <input name="ctl00$MainContent$txtAutoID" type="text" id="ctl00_MainContent_txtAutoID" /> 
    <input name="ctl00$MainContent$txtInherit" type="text" id="MainContent_txtInherit" /> 
    <input name="ctl00$MainContent$txtStatic" type="text" id="txtStatic" /> 

  • 打赏
  • 举报
回复
有多个控件你要增加多个js变量来记录对应的客户端id,楼主学下基础的html吧,少用些服务器控件
zznice 2013-05-20
  • 打赏
  • 举报
回复
引用 1 楼 net_lover 的回复:
母板页中的id已经不是服务器控件的id了,如果服务器控件,则客户端应该写 $("#<%=phonetype.ClientID%>").click(function ().... 其他代码类似
谢谢版主,还有一事请教您,就是从弹出层里怎么传值到带母版页的子页上的控件
zznice 2013-05-20
  • 打赏
  • 举报
回复
引用 5 楼 showbo 的回复:
因为你控件id变了,如果没有必要,使用客户端的控件,而不是服务器端的,这样id就不会变了,看你的要求应该不需要服务器端的控件。 一定要用服务器端控件,你可以查看B.aspx客户端源代码id变成什么样的了,然后修改1.aspx中的id 或者将id保存到js变量中 b.aspx
var phonetype='<%=phonetype.ClientID%>';//////////
var phoneid='<%=phoneid.ClientID%>'
$("#"+phonetype).click(function () {///////////////
                $.layer({
                    type: 2,
                    title: ['机型选择', false],
                    iframe: { src: '1.aspx' },
                    area: ['980px', '500px'],
                    offset: ['80px', '20%'],
                    closeBtn: [0, true],
                    shadeClose: true
                });
            })
1.aspx
   $(function () {
        $("input[type='button']").click(function () {
            $("#"+window.parent.phonetype, /////////////
window.parent.document).val($(this).prev(["input"]).val());
            $("#"+window.parent.phoneid/////////
, window.parent.document).val($(this).next(["input"]).val());
            var index = parent.layer.getFrameIndex();
            parent.layer.close(index);
 
        });
    })

你好,版主,按您的方法试了一下,还是不行,关于b.aspx这个页面,我没采用AJAX方式,而是放了一个表单,上面放了N个服务器控件,用于向数据库插入记录用的。
  • 打赏
  • 举报
回复
因为你控件id变了,如果没有必要,使用客户端的控件,而不是服务器端的,这样id就不会变了,看你的要求应该不需要服务器端的控件。 一定要用服务器端控件,你可以查看B.aspx客户端源代码id变成什么样的了,然后修改1.aspx中的id 或者将id保存到js变量中 b.aspx
var phonetype='<%=phonetype.ClientID%>';//////////
var phoneid='<%=phoneid.ClientID%>'
$("#"+phonetype).click(function () {///////////////
                $.layer({
                    type: 2,
                    title: ['机型选择', false],
                    iframe: { src: '1.aspx' },
                    area: ['980px', '500px'],
                    offset: ['80px', '20%'],
                    closeBtn: [0, true],
                    shadeClose: true
                });
            })
1.aspx
   $(function () {
        $("input[type='button']").click(function () {
            $("#"+window.parent.phonetype, /////////////
window.parent.document).val($(this).prev(["input"]).val());
            $("#"+window.parent.phoneid/////////
, window.parent.document).val($(this).next(["input"]).val());
            var index = parent.layer.getFrameIndex();
            parent.layer.close(index);
 
        });
    })

zznice 2013-05-19
  • 打赏
  • 举报
回复
用母版本还真是闹心啊,之前用都正常,加了母版页就麻烦来了
zznice 2013-05-19
  • 打赏
  • 举报
回复

<script>
    $(function () {
        $("input[type='button']").click(function () {
            $("#phonetype", window.parent.document).val($(this).prev(["input"]).val());
            $("#phoneid", window.parent.document).val($(this).next(["input"]).val());
            var index = parent.layer.getFrameIndex();
            parent.layer.close(index);

        });
    })
</script>
谢谢版主,按您的方法,搞定了,但是新问题出来了 上面的代码是放在1.aspx里用于通过点击按钮将值传给B.aspx页面的,之面可以,但是将B页加入到母版页后,上面的代码不能传值到B页了,我设成 $("#<%=phonetype.ClientID%>", window.parent.document).val($(this).prev(["input"]).val()); 也不行
孟子E章 2013-05-19
  • 打赏
  • 举报
回复
母板页中的id已经不是服务器控件的id了,如果服务器控件,则客户端应该写 $("#<%=phonetype.ClientID%>").click(function ().... 其他代码类似

52,792

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧