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。

我整个星期都试图找出这个问题,我真的没有运气

我刚看到这篇文章

http://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 =”的事情: