热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单页面网站关于id冲突的解决办法

最近做了一个单页面的网站,所有的页面加载都是通过局部刷新的方式,并且不用iframe,并且我们引入了动态tab页签:所有的页

最近做了一个单页面的网站,所有的页面加载都是通过局部刷新的方式,并且不用iframe,并且我们引入了动态tab页签:

 

所有的页签里的内容都只是一个元素,都在同一个html页面上,没有任何iframe分割,这样遇到了一个非常突出的问题——页面复用。

 

页面复用会遇到什么问题?

假设在A标签页和B标签页用的是同一个jsp,就像上图的两个【字典编辑】页签,里面的内容用的是同一个jsp,那么这个jsp里面的js方法名、js变量名、页面元素id都会冲突。

冲突带来一些列问题,给表单绑定方法的时候不知道实际是给哪个表单绑定的方法,表单提交完后刷新的不知道是哪个div,刷新的是哪个树等等等等。

 

通过一番尝试和折磨找到了以下几个解决办法(如果再给我个机会重做的话,我一定会放弃动态多标签):

1、每打开一个tab签都会在后台生成一个不会重复字符串【idPrefix】放在session里,例如(_33ae9d282966409b9c9c041fb93aa596_),然后在变量和id命名时通过el表达式将idPrefix作为他们的前缀,如下:

//js变量命名
var ${idPrefix}sysDictTree;//树对象;
var ${idPrefix}selectDictNode;//js方法变量命名
function ${idPrefix}reloadDictNodes(){}//dom元素id命名
<div class&#61;"col-md-9" id&#61;"${idPrefix}dictItemNodeDetail">div>

因为是jsp所以可以在前面加个${idPrefix}&#xff0c;姑且不考虑这个工作量和开发复杂度&#xff0c;如果每一个tab页签中的内容都是一次性打开的&#xff0c;那么这样做已经可以解决。

但是&#xff0c;像上图这样的左边一个树右边一个表单的情况&#xff0c;这就会引发一个问题&#xff1a;

我先打开了A的字典编辑&#xff0c;这个时候idPrefix假设是A1&#xff0c;然后我再打开B的字典编辑&#xff0c;idPrefix已然被换掉了&#xff0c;假设变成了B1&#xff0c;

此时我回头来操作A的树&#xff0c;点击了某个叶子节点&#xff0c;右边加载了一个表单AForm&#xff0c;

然后操作B的树&#xff0c;点击某个叶子节点右边加载了一个BForm&#xff0c;

AForm和BForm用的是同一个jsp&#xff0c;那么此时AForm和BForm里的${idPrefix}是一样的&#xff0c;带来的结果是他们仍然会产生冲突&#xff0c;这个时候怎么办&#xff1f;

对于这种同一个tab签上的内容&#xff0c;不是一次性加载的&#xff0c;我又做了这样一个改进&#xff1a;

 

2、虽然AForm和BForm的id、js变量、js方法名是一毛一样的&#xff0c;但是他们位于不同的tab签中&#xff0c;并且我们的tab签有一个特点&#xff0c;某一个时刻只有一个tab签是激活&#xff08;active&#xff09;的&#xff0c;

那么我们在js里面为Form本身或者Form里的某个id的元素绑定事件或者直接操作他们的时候&#xff0c;我们可以获取当前激活的tab签中的某个元素&#xff0c;因为我们只有打开&#xff08;激活&#xff09;某个页签才能操作里面的东西&#xff0c;所以在这里【当前】和【现在被激活的】tab签是同一个。用代码来表示就是&#xff1a;

Addtabs.getCurrentTabElementById("${idPrefix}dictNodeForm").validate({rules: {TEXT: {required: true},VALUE: {required: true},IS_USE: {required: true},SEQ: {required: true,digits: true}}
);

其中的

Addtabs.getCurrentTabElementById

就代表获取当前激活的。

 

这个时候第三个问题也来了&#xff0c;如果我想提交完这个表单&#xff0c;然后去刷新当前tab签上的树&#xff0c;我怎么知道那个树的id是什么&#xff0c;或者如果那个树已经放在某个变量里了我怎么知道那个变量的变量名&#xff1f;

 

3、我的做法是在我们加载某个tab页签的时候&#xff0c;把idPrefix存放在tab签的内容div的属性当中&#xff0c;因为树和div是一起加载的&#xff0c;所以这个属性里的idPrefix和树的肯定一致&#xff0c;我只需要在js中获取当前tab签的内容div里的该属性即可&#xff0c;然后&#xff1a;

eval("pnode&#61;"&#43;tabIdPrefix&#43;"sysDictTree.getNodeByParam(&#39;id&#39;,pid)");

通过eval来执行拼接的js即可。

 

暂且就这三个措施&#xff0c;非常复杂&#xff0c;其它问题遇到再解决吧。。




 

转:https://www.cnblogs.com/flying607/p/6208380.html



推荐阅读
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文深入解析了HTML框架集(FRAMESET)的使用方法及其应用场景。首先介绍了几个关键概念,如如何通过FRAMESET标签将主视图划分为多个独立的区域,每个区域可以加载不同的HTML文件。此外,还详细探讨了FRAMESET在实际开发中的优缺点,并提供了具体的实例代码,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 解决针织难题:R语言编程技巧与常见错误分析 ... [详细]
author-avatar
拥有勒幷不代表幸福_563
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有