jQuery colorbox在ASP中中断回发.NET Web窗体
本文关键字:NET Web 窗体 中断 colorbox ASP jQuery | 更新日期: 2023-09-27 18:04:29
我们有一个web表单项目,在其中我想使用jQuery的colorbox插件弹出一个带有提交按钮的小窗口。因为我们使用的是web表单,所以表单标签不能成为颜色盒的一部分。问题是,当colorbox将DOM中的元素加载到colorbox中时,它实际上是将其移动到body的顶部,进入一个绝对定位的元素。
通常这是好的,但它实际上从表单标签中取出内容。这使得在colorbox中的提交按钮不再引起回发。
这里是一个小提琴代表的问题:http://jsfiddle.net/Chevex/vbLFD/
如果你点击提交更改按钮,你会注意到,表单张贴到谷歌和窗口加载谷歌。但是,如果单击链接将DIV加载到colorbox中,然后在colorbox中单击提交按钮,则不会发生任何事情。按钮从表单标签中取出。
是否有一个简单的修复这个行为?
编辑
我想用jQuery提交表单,如下所示:http://jsfiddle.net/Chevex/vbLFD/6/
这样做的问题是,如果DIV包含其他输入元素,如文本框,那么它们也将从表单标记中删除。因此,即使使用jQuery提交表单,也不会包含应该与表单一起发布的输入值。
解决这个问题的唯一方法似乎是让colorbox以某种方式留在表单中。
我们使用的是Colorbox v1.4.33,应用已接受的答案并不能解决问题。
Colorbox创建两个独立的DIV元素,一个ID= Colorbox,另一个ID=cboxOverlay。您需要移动这两个DIV元素,以便正确呈现Colorbox对话框和ASP。. NET回发到触发器。
$(function () {
$("#btnBoligforholdAdd").colorbox({
inline: true,
href: "#modalDialog_Boligforhold",
width: "450px",
closeButton: false,
opacity: 0.5,
onOpen: function () {
$('#aspnetForm').append($('#cboxOverlay'));
$('#aspnetForm').append($('#colorbox'));
}
});
});
您可以使用一个简单的jQuery块将它移动到主表单的顶部。
$(document).ready(function() {
var colorbox = $("#colorbox");
colorbox.remove(); // Removes from dom
$('form#idOfForm').prepend(colorbox);
});
现在你在这里加载的任何东西都应该在全局表单内
您可以使用的另一种选择器是全局表单的body > form
,但它不如id快。
下面的代码打开了一个2按钮表单的颜色框,允许将数据保存回Save按钮上的page behind功能。
1)实际的行内形式
<div style="display: none;">
<div id="formcontent" class="form-horizontal padder">
<!--no <form> tag here as its inline content-->
</div>
</div>
Javascript 2)
$(document).ready(function () {
$("#colorbox, #cboxOverlay").appendTo('form:first'); //required for colorbox forms!
$("#<%=cmdAdd.ClientID %>").colorbox({ inline: true, href: "#ColorBoxNewDiagram" });
$("#cmdNewDiagram").click(function () {
$.fn.colorbox.close();
});
$("#<%=cmdCancelAdd.ClientID%>").click(function () {
$.fn.colorbox.close();
return false;
});
});
Color box将隐藏的容器追加到
标签,它位于asp <表单>标签…解决方案是:
追加
在jquery.colorbox.js文件中搜索以下行:
(document.body美元)。附加(叠加,美元框。追加(包装,loadingBay美元));
用以下行替换:
表单>$("形式")。预先考虑(叠加,美元盒子。追加(包装,loadingBay美元));