easyui的tab加载页面中的form重复提交
http://blog.csdn.net/fxz1982/article/details/8987769
Easyui中的tabs组件以href方式加载目标页面,如果目标页面中有dialog或者window这类的easyui组件中放了form.那么在关闭这个tab再次打开.如果进行form提交操作,后台就会收到两次提交请求,再次重复以上操作会收到3次提交请求,如果将表单serialize()后以jquery的post提交服务器将收到值全是数组方式组织的.
经分析发现,Easyui的tab加载页面后会把目标页面的dialog组件的DOM代码从目标页面中拿出放到本页面的DOM结构中.先看以下在目标页面中dialog初始化前后的差异
1.目标页面原始DOM结构如下(页面中的dialog未经实例化)
其中<!-- 表单 -->代码<div id="dept-dialog"...>就是包含form的dialog
2.如果目标页面在加载时实例化了dialog,代码如下
可以看到<!-- 表单 -->下的<div id="dept-dialog"...>代码的DOM结构发生了改变,被移动到了截图中下方的位置
3.那么再来看一下,这个页面被tabs加载后发生了什么
截图中,蓝框内是tab中被加载的目标DOM,可以看到红色框中<!-- 表单 -->下的<div id="dept-dialog"...>代码从目标页面的DOM结构中被移走了,被移动到了tabs组件所在页面的DOM结构中,因为DOM展开后太大所以截图没有截到.
这就是问题所在,当tabs中目标页面被关闭时,Easyui会销毁掉蓝框内的DOM内容,但是目标页面中的dialog组件被移动到外面,导致dialog的DOM内容没有与目标页面一起销毁,当再次以tab方式加载目标页面时,会在tab组件所在页面的DOM结构中生成块相同的<div id="dept-dialog"...>代码内容.这就导致了表单的重复提交.
解决方法:目前没有找到好的办法,笨一点的,在tabs加载页面前,记录本tab页面中所有组件的ID,在tab关闭时手动找到这个对象删除掉.
加载时的代码:
- $('#my-tabs').tabs('add',{
- title: title,
- href : url,//内容页面的地址
- border : false,
- closable:true,
- id : title,
- extractor: function(data){
- //抽取body中的内容
- var pattern = /<body[^>]*>((.|[\n\r])*)<\/body>/im;
- var matches = pattern.exec(data);
- if (matches){
- data = matches[1];
- }
- var tmp = $('<div/>').html(data);
- var divs = $(tmp).find('[id]');
- var ids = [];
- for(var i=0;i<divs.length;i++){
- ids.push(divs[i].getAttribute("id"));
- }
- //记录本tab中的所有带ID的DIV
- $('#base-tabs').tabs('getTab',title).divs = ids;
- return data;
- }
关闭时的动作:
- $('#my-tabs').tabs({
- autoWidth:true,
- onBeforeClose:function(title,index){//关闭面板前把此功能的资源释放
- var tab = $(this).tabs('getTab',index);
- //准备删除的DIV内容
- $('#my-tabs').attr("rmdiv",tab.divs);
- },onClose : function(){//删除被关闭tab中用到的DOM对象
- var divs = $('#my-tabs').attr("rmdiv").split(",");
- for(var i=0;i<divs.length;i++){
- var divTarget = $('#'+divs[i]);
- if(divTarget){
- divTarget.remove();
- }
- }
- }
- });
easyui的tab加载页面中的form重复提交的更多相关文章
- 加载 页面 中js 方法
js 文件中 var mingchen= mingchen|| { init: function (){ } }; 文件中 mingchen.init(); 注意问题: 在新加载 页面中 ...
- EasyUI的window加载的页面不执行js问题说明
http://364434006.iteye.com/blog/1671907 ———————————————————————————————————————————————————————————— ...
- IE8中jQuery.load()加载页面不显示的原因
一.jQuery.load() jQuery.load(url,[data],[callback])通过Ajax异步请求加载服务器中的数据,并把数据放到指定元素中. url :请求服务器的地址 dat ...
- 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
一.问题分析 对于后台系统,相比大家都有所印象,知道其中的布局结构,如图: 在这种布局中我们需要将header,sidebar,footer分开,而且对于中间部分的content内容需要动态变化,即根 ...
- jquery动态加载并解决被加载页面js失效问题
代码布局结构分为 header left content html代码如下: <!DOCTYPE html> <html lang="zh-CN"> & ...
- 【转】关于easyui tab 加载 js ajax 不走后台的问题, 怕找不到 以防万一
一直以来群里里面很多人反应,在用tab加载界面的时候,界面里面的js不会执行.今天在此说明一下原因. 不管是window,dailog还是tab其实质最终都是继承了panel.panel有两种方式展示 ...
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- 关于IE8中使用Jquery load方法无法正常加载页面
最近发现,在IE8中使用Jquery load方法时无法正常加载页面,页面显示空白,没有加载.调试发现,页面多了一个</div>标签,但在FF和CH下表现正常.希望能给遇到同样问题的码农有 ...
- PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题
PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动 ...
随机推荐
- 20155234 《网络对抗》Exp 8 Web基础
基础问答 什么是表单 可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁. 表单包括两个部分:一部分是HTML源代码用于描述表单(例如,域,标签和用户在页面上看见的按钮),另一部分是脚本 ...
- TMS320VC5509的DAC输出TLV5620
1. TLV5620的SPI数据是11位的 但是看图3和图4,感觉用2个字节应该也可以的,不知道行不行,可以试一试吧 2. 不过可惜的是5509A的SPI没有11位的,有点麻烦,只能先试试用两个字节行 ...
- idea 中全局查找不到文件 (两shift),单页搜索不到关键字的原因
全局查找不到文件是因为把要找的目录的本级或者上级设置为了额外的,所以自然找不到 而单页搜索不到内容是因为设置了words关键字,这个要全部都输入完才能找到(也就是整个关键字进行匹配,匹配到了整体才会查 ...
- Ajax 上传文件(input file FormData)
FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据.其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用. jQuery Aj ...
- [CF1059E]Split the Tree[贪心+树上倍增]
题意 给定 \(n\) 个节点的树,点有点权 \(w\) ,划分成多条儿子到祖先的链,要求每条链点数不超过 \(L\) ,和不超过 \(S\),求最少划分成几条链. \(n\leq 10^5\) . ...
- HTML 背景实例
71.HTML 背景实例好的背景使站点看上去特别棒.背景(Backgrounds)<body> 拥有两个配置背景的标签.背景可以是颜色或者图像.<body> 标签中的背景颜色( ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- LintCode——合并排序数组II
描述:合并两个排序的整数数组A和B变成一个新的数组 样例:给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 1.Python:先将数组B加到数组A之后,然后 ...
- Kubernetes采用CoreDNS
参考文档: kubernetes插件:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/coredns 自 ...
- 唐雎(jū)不辱使命
唐雎(jū)不辱使命 选自<战国策> 秦王使人谓安陵君曰:“寡人欲以五百里之地易安陵,安陵君其许寡人.”安陵君曰:“大王加惠,以大易小,甚善.虽然,受地于先生,愿终守之,弗敢易.”秦王不 ...