热门标签 | 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



推荐阅读
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
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社区 版权所有