gpt4 book ai didi

javascript - 如何不更改网页URL?

转载 作者:行者123 更新时间:2023-11-30 08:10:34 25 4
gpt4 key购买 nike

我需要使用 jQuery Mobile 设置按钮相对于当前页面 url 的 href 值。

所以我天真地写了下面的代码:

var path = window.location;
path = path.replace( "shop","edit" );
$("#btnEdit").setAttr( "href", path );

页面的 url 为 http://mysite/shop/1 按钮的 href 应设置为 http://mysite/edit/1.

当这段代码插入到我的“pageinit”处理程序的顶部时,我看到浏览器(firefox 和 chrome)地址栏中的 url 更改为 http://mysite/shop/shop 并且页面显然已重新加载,所以我收到 404 错误,因为它必须在/shop/之后有一个数字,并且它的值应该为 1。

即使我将其注释掉,重新启动网络服务器,浏览器也会自动将 http://mysite/shop/1 替换为 http://mysite/shop/shop 在其 url 位置字段中。 ?!

我必须对这些说明进行注释,重新启动服务器以及避免此 url 替换的任何操作。

这是怎么回事?我怎样才能获得页面位置 url 并设置我的按钮 href 值而没有这种讨厌的副作用?


编辑 1:

  1. 我确实应该使用 .attr.prop 而不是不存在的 .setAttr。
  2. url 更改仅在 chrome 和 firefox 中显示,在 iPad、Android 或 IE9 中不显示。运行 chrome 调试工具,似乎在指令 matches.call( document.documentElement, "[test!='']:sizzle"); 处有 jQuery 抛出的 DOMException。我不知道这是什么意思,也不知道为什么它会导致页面重新加载不同的 url。

编辑2:

  1. 我使用 fapws 作为网络服务器,使用 mako 作为模板。在我删除 mako 生成的缓存 python 文件后,url 更改消失了。 ?!
  2. 按照建议,我应该使用 .attrwindow.location.href。这有效并且按钮的 href 属性设置为正确的值。
  3. 尽管它仍然无法正常工作。我现在看到了一种新的意外和不良行为。当点击按钮时,地址栏中的url变为http://mysite/edit/1,它执行商店页面的pageinit(?!),然后加载编辑页面不执行它的 pageinit 事件。

解决方案:

在 html 文件中,我用默认的 href 值定义了这个按钮,没有什么特别的:

<a href="#" data-role="button" data-icon="pencil" id="btnEdit"> Edit </a>

在脚本文件中,更准确地说是在 $(document).on('pageinit',...) 的处理程序中,我现在有了这段代码,它设置了 href 值,但也添加了 rel="external"属性到按钮。

var path = window.location.href;
path = path.replace( "shop","edit" );
$("#btnEdit").attr( "href", path ).attr( "rel", "external" );

页面不再自动重新加载,奇怪的加载行为已被移除。发生这种情况是因为 jQuery Mobile 中 标记的默认行为是使用 ajax 加载目标页面,而不是正常的整页加载。属性 rel="external"禁用此行为,然后引用页面正常完全加载。此行为在 jQM 文档中描述 here .

注意:虽然很多答案都对我解决这个问题做出了具体的贡献,但是我还是查看了Mad Man Moon的答案,因为他的帮助很大,而且得分较少。如果可以检查多个答案,我会这样做的。

最佳答案

Even if I comment it out, restart the web server, the browser automatically replaces the ~/shop/1 with the ~/shop/shop in its url location field. ?!

I have to comment these instructions, restart the server and whatever to avoid this url replacement.

  1. 我有点困惑。您要注释掉的“它”是什么?
  2. 即使您的替换是针对您对 window.location 的变量引用执行的,它也应该将“shop”替换为“edit”,因此重定向应该是“mysite/edit/1”(除非 js regex 引擎是否将 1 视为捕获索引?)
  3. 根据您的 RESTful 风格 URL,我怀疑您正在使用某种服务器端 MVC 框架。如果是这样,重定向很可能是服务器端问题,与替换无关。
  4. 最后,不要设置 path = window.location,而是将其设置为等于 window.location.href。 window.location 是包含 URI 属性(href、search、hash 等)的对象。 window.location.href 是完整 URL 的字符串属性。

编辑:我决定自己做一个小测试并确认问题是您正在设置 path = window.location。设置 path = window.location.href,您的代码将起作用。

关于javascript - 如何不更改网页URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com