Fancybox – ASP.NET按钮不起作用
我刚刚决定使用Firebug,当创建Fancybox窗口时,它实际上需要我的所有ASP.NET控件(包含在DIV标记中)并将它们放在FORM标记之外。 所以我猜这就是为什么然后ASP.NET按钮不做任何事情 – 它被放置在窗体之外。
那么,除了使用完全不同的modal dialog之外,你有什么建议我可以阻止这个(或使ASP.NET按钮工作)吗?
编辑:好的,人们报告说某些提议的修复程序在某些版本上适用于他们。 因此,请务必阅读所有答案/滚动到底部,了解如何在不同的Fancybox版本上解决此问题。
你需要改变它(在jquery.fancybox-1.3.1.js的第719行附近):
$('body').append( tmp = $(''), loading = $(''), overlay = $(''), wrap = $('') );
至
$('form').append( tmp = $(''), loading = $(''), overlay = $(''), wrap = $('') );
对于任何需要使用Fancybox版本2来解决此问题的人来说,这是一种更容易的方法。 您所要做的就是在代码中添加父:“form:first”,例如
$(document).ready(function () { $(".various").fancybox({ parent: "form:first", fitToView: true, width: '300px', height: '100px', autoSize: false, closeClick: false, openEffect: 'none', closeEffect: 'none', modal: false }); });
然后,这会将fancybox元素附加到表单标记内的dom中,而不是在body标记内。
Fancybox版本2.1.4
改变这2行
2069线左右:
document.all && !document.querySelector ? $('html') : $('body');
至
document.all && !document.querySelector ? $('html') : $('form:first');
在1960线附近:
this.overlay = $('').appendTo('body');
至
this.overlay = $('').prependTo('form');
你也可以使用appendTo但这取决于你。 在我的情况下,我需要prependTo。
我整个星期都试图找出这个问题,我真的没有运气
我刚看到这篇文章
https://usmanshabbir.blogspot.com/2010/10/click-server-button-problem-in-jquery.html
这解释了如何使用jQuery UI对话框进行回发。
如果不是100%使用花式盒子,那么这种方法绝对值得一试,今天给我带来了很多麻烦。
在不改变FancyBox源的情况下,将其放在FancyBox脚本之后(在任何加载事件之外!!!):
jquery.fancybox-1.3.4.js第1040行
//$('body').append( $('form').append( tmp = $(''), loading = $(''), overlay = $(''), wrap = $('') );
在FF和IE9上为我工作(我的asp:Button做回发),谢谢你的解决方案
以上更新对我不起作用,fancybox仍然在表单之外添加。 然后我在jquery.fancybox-1.3.2.js中注释掉了这6行,发现它们在我的代码中根本没有被使用。
我在fancybox js文件中对’body’进行了搜索,并将其更改为’form’:
jquery.fancybox-1.3.2.js(ln 484)
jquery.fancybox-1.3.2.pack.js(ln 27,ln 41)
现在,fancybox已添加到表单中,服务器控件正在运行。
Fancybox版本:2.1.2
jquery.fancybox.js的第1782行
改变这个:
this.el = document.all && !document.querySelector ? $('html') : $('body');
对此:
this.el = document.all && !document.querySelector ? $('html') : $('form:first');
我使用Fancybox 1.3.4将一个aspx页面显示为fancybox iframe中的弹出页面。 但是弹出页面中的按钮不会导致回发。 我没有像你之前说的那样改变任何东西。 相反,我做了以下。
function check() { var validated = Page_ClientValidate(); if (validated) { __doPostBack('<%=bur.ClientID%>',''); parent.$.fancybox.close(); return true; } else { return false; } } protected void bur_Click(object sender,Eventargs e) { //put breakpoint here. }
Fancybox 1.3.4实际上做回发。
但是如果OnClientClick在服务器端点击事件之前关闭它就不会回发。所以上面是解决这个问题的方法。(在javascript函数中添加doPostBack)。
通常Fancybox 1.3.4会回发而不会对其.Js文件进行任何更改。 但要关闭它,需要编写此行ScriptManager.RegisterClientScriptBlock(this, GetType(), "", "parent.$.fancybox.close();", true);
在服务器端单击事件。 只有这样才会调用两个服务器端事件,并且fancybox也会关闭。
但Fancybox 2.1.3(最新版)在OnClientClick关闭后会发回回事件。
如果刷新父级是一个服务于此目的的解决方案,则可以刷新onClosed:
$(".fancybox").fancybox({ 'onClosed': function() { parent.location.reload(true); } });
没有fancybox js库文件的任何更改,对我有用的是下面,
$('.your-selector').fancybox({ afterShow: function () { $('.fancybox-overlay').appendTo('form'); } });
我已经在表单标签内移动了fancybox div,现在,服务器端按钮就像魅力一样:)真是最好..我希望这对你也有用。 。:)
您无需更改任何代码或任何库…只需试试这个..
$('.fancybox').fancybox({ parent: "form:first", // jQuery selector });
这是可能的最糟糕的解决方案,但它对我有用。 我需要同时使用faceybox和codebehind。 设置您的精美框以在单击按钮时加载。 然后onClosed将值传递给另一个C#页面并在页面加载后面执行代码。
然后这里只是“class =”的事情:
上述就是C#学习教程:Fancybox – ASP.NET按钮不起作用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1006204.html