关于jq easyui 刷新tabs的问题

搞了两个多小时,最后还是使用模拟点击搞定了关于tabs刷新的问题。

情景如下图:父级页面:SystemManage.aspx 子页面(传感器管理):CGQManageWeb.aspx

使用jq-easyui提供的tabs插件完成的后台的布局操作。遇到一个问题,在父级页面添加新的tab panel也就是一个iframe后,如何在这个tab panel中调用jq-easyui提供的方法刷新这个页面。如图所示:当点击“保存修改”或“添加”后,如果保存成功那么同步刷新页面,以便重新加载数据。

有关jq-easyui的知识点可以看这里:http://www.jeasyui.net/plugins/160.html

方法:1.直接刷新页面,刷新前保存这个tab panel的title或者href,也就是在使用add方法添加新的tab panel时提供的url,然后重新设置这个panel的状态为选中状态,或者重新add一遍这个tab panel。

2.调用jq-esayui的自带方法update刷新选中的tab panel。

方法1是可行的,但没用这个方法去解决这个问题,我就想用方法2,有点轴。

addTab方法:

 1 function addTab(title, url) {
 2     var gly = document.getElementById("gly").value;
 3     if (gly != 0&&title=="部门管理") {
 4         alert("无权限");
 5         return;
 6     }
 7     if ($('#tt').tabs('exists', title)) {
 8         $('#tt').tabs('select', title);
 9     } else {
10         var content = '<iframe scrolling="auto" frameborder="0"  src="' + url + '" style="width:100%;height:100%;"></iframe>';
11         $('#tt').tabs('add', {
12             title: title,
13             content: content,//此处也可用href属性代替href:,
14             closable: true
15         });
16     }
17 }

url就是要添加的tab的页面的地址。title就是显示的标题“传感器管理”。

下面进入正体,如何在当前选中页面中点击“保存”按钮后可以刷新当前页面。

首先来看官方的update方法的demo:

 1 // update the selected panel with new title and content
 2 var tab = $('#tt').tabs('getSelected');  // get selected panel
 3 $('#tt').tabs('update', {
 4     tab: tab,
 5     options: {
 6         title: 'New Title',
 7         href: 'get_content.php'  // the new content URL
 8     }
 9 });
10  
11 // call 'refresh' method for tab panel to update its content
12 var tab = $('#tt').tabs('getSelected');  // get selected panel
13 tab.panel('refresh', 'get_content.php');

首先通过tabs方法获取选中的panel对象。然后调用update方法更新数据其实相当于重新加载了一次当前页面,只不过这个方法省了很多过程操作。

问题一,如果这个方法放在父级页面中去调用,一点问题都没有,但是如果是放在tab panel中这个子级页面中去调用就有问题了,$("#tt")是无法获取到对象的,因为在iframe里是找不到这个元素的。所以需要使用parent方法。

第二个问题,tabs方法无法识别,虽然在父级页面中你已经引入了easyui的js文件,但是iframe里是无法识别的,所以报错!还需要在子级页面iframe中引入js文件。

问题三,如上述代码中的第7行,需要提供href的值,如果在你不知道的情况下如果提供,或者说,即使知道每次调用也要改这个参数,很是麻烦!

下面解决这些问题:

问题一,没想到什么好办法,而且找到的办法都无效,弃之,所以update方法还是放在了父级页面中。方法如下:

 1 function ReFresh() {
 2     var current_tab = $("#tt").tabs("getSelected");
 3     var urlstr = current_tab.panel('options').content.split('src')[1].split('style')[0];//获取tab panel的content,因为addTab方法中使用的就是content
 4     var URL = urlstr.substring(2, Number(urlstr.length-2));//截取url
 5     $("#tt").tabs('update', {
 6         tab: current_tab,
 7         options: {
 8             content: '<iframe scrolling="auto" frameborder="0"  src="' + URL + '" style="width:100%;height:100%;"></iframe>',
 9             //或者 href : '';  
10         }
11     });
12 }

这样$("#tt")就可以获取到对象了。

问题二,看代码中的3-4行,获取选中tab panel的href或url。

获取content的具体内容因为content里面包含tab panel的地址URL。然后根据URL的特点截取重要信息。

问题三,通过获取content的值就能获取到被选中的tab panel的href。

一个隐藏的button调用该方法。

1 <input type="button" value="re" id="re" onclick="ReFresh()" style="display:none"/>

该方法在CGQManageWeb.aspx上,获取隐藏的button,然后触发点击事件。

1 //模拟点击进行刷新
2 function ReFresh()
3 {
4     var btn = parent.document.getElementById("re");
5     //alert(btn.value);
6     btn.click();
7 }

结束,可能不是很清楚,可能还有更好的方法,请大神勿喷!

 

posted @ 2018-01-20 23:56  阿发博客  阅读(418)  评论(0编辑  收藏  举报