|
jQuery的内部页面跳转,说穿了就是跳转改`window.location`。但真正折磨人的页面不是跳转本身,而是内部跳转前那点事儿——表单没保存、弹窗没关、跳转用户正输入到一半。页面裸跳转会把所有状态都扔进垃圾桶,内部用户回来时骂娘。跳转 我见过最蠢的页面写法是直接在`click`事件里塞`window.location.href = "page2.html"`。这玩意儿在静态页面上能用,内部可一旦涉及多步操作——比如填写一个三页的跳转表单,或者从列表页点进详情页再返回——用户就彻底迷路了。页面浏览器后退键倒是内部能救,但有些页面用了`window.open`或者`target="_blank"`,跳转后退键直接失效。页面 实际工作中我常用一个笨办法:把跳转动作包装成函数,统一管理。比如这样: function goTo(url, params) { if (params) { url += '?' + $.param(params); } window.location.href = url; } 这不算什么高深技术,但至少让所有跳转都经过一个出口。真正麻烦的是跳转前要保存状态。比如你有个购物车页面,用户点了"去结算",你得先把购物车数据存到`localStorage`或者`sessionStorage`里,再跳转。直接跳过去再异步拉取?那等于告诉用户"你的操作我没记住"。 另一个坑是跨页面传参。用`?id=123`这种query string最直观,但参数一多就乱。我见过有人把整个对象序列化塞进URL,结果超过浏览器长度限制,页面直接白屏。更稳的做法是存到`sessionStorage`,跳转后读出来再清理。jQuery本身不提供这个功能,但配合原生API也就几行代码的事。 还有个细节容易被忽略:跳转动画。有些交互需要先做个淡出效果再跳转,不然页面切换太生硬。jQuery的`fadeOut`配合回调函数能做到,但注意别在动画期间让用户重复点击触发多次跳转。加个锁变量就行: let navigating = false; $('#btn').on('click', function() { if (navigating) return; navigating = true; $('body').fadeOut(300, function() { goTo('next.html'); }); }); 这代码看着简单,但实际项目里经常忘了防重复点击。用户手一抖点两下,页面跳两次,后退键就乱了。 如果你做的是SPA风格的多页面应用,那还得考虑公共头部和底部怎么同步。用jQuery的`load`方法动态加载公共部分是个土办法,但比iframe轻量得多。跳转时只替换内容区,URL用`history.pushState`更新,这样浏览器前进后退也能正常工作。不过这套逻辑写起来比想象中啰嗦,要处理加载状态、错误重试、还有页面间的滚动位置记忆。 说到底,jQuery做多页面跳转的核心不是跳转动作本身,而是状态管理。用户从A页跳到B页,再跳回A页,A页的滚动位置、输入框内容、筛选条件是不是还在?如果不在,体验就割裂。我做过一个后台管理系统,列表页带筛选条件,点进详情再返回时筛选条件全丢了,用户气得直接关浏览器。后来用`sessionStorage`把筛选状态缓存起来,返回时恢复,这才消停。 最后说个反直觉的观察:很多人觉得jQuery过时了,但老项目里它依然坚挺。原因无他,兼容性好,API稳定,团队里人人都会。跳转逻辑这种基础功能,用jQuery写反而比用现代框架的`router`更直接——没有路由配置文件,没有嵌套路由的坑,一个函数搞定。当然,如果你从零开始一个新项目,我不会推荐jQuery,但如果你在维护一个老项目,别急着重构,把跳转逻辑封装好,比换框架实在得多。 |