如何不更改网页网址?

时间:2012-06-10 11:17:51

标签: javascript jquery jquery-mobile

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

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

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

页面的网址是 http:// mysite / shop / 1 ,按钮的href应设置为 http:// mysite / edit / 1

当我的'pageinit'处理程序顶部插入此代码时,我会看到浏览器位置栏中的网址(firefox& chrome)更改为 http:// mysite / shop / shop 并且页面显然已重新加载,因此我收到404错误,因为它必须在/ shop /之后有一个数字,并且它应该具有值1.

即使我发表评论,重新启动网络服务器,浏览器也会自动用 http:// mysite / shop / shop替换 http:// mysite / shop / 1 在其网址位置字段中。 ?!

我必须评论这些说明,重新启动服务器以及任何可以避免更换网址的内容。

发生了什么事? 如何在没有这种令人讨厌的副作用的情况下获取页面位置网址并设置我的按钮href值?


修改1:

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

  3. 编辑2:

    1. 我使用fapws作为Web服务器和mako作为模板。擦除mako生成的缓存python文件后,网址更改消失了。 ?!
    2. 根据建议,我应该使用 .attr window.location.href 。这工作,按钮的href属性设置为正确的值。
    3. 虽然它仍然无法正常工作。我现在看到一种新的意外和不良行为。单击按钮时,位置栏中的URL将更改为 http:// mysite / edit / 1 ,它会执行商店页面的页面(?!),然后加载编辑页面不执行其pageinit事件。

    4. 解决方案:

      在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" );
      

      没有更多的页面自动重新加载,并且已经删除了负载的奇怪行为。这是因为&lt; a&gt;的默认行为了。 jQuery Mobile中的标记是使用ajax加载目标页面而不是正常的整页加载。属性rel =“external”禁用此行为,然后正常完全加载引用的页面。 jQM文档here中描述了此行为。

      注意:尽管许多答案都有助于我帮助我解决这个问题,但我检查了Mad Man Moon的答案,因为他非常乐于助人并且积分较少。如果有可能检查多个答案我会做的。

4 个答案:

答案 0 :(得分:2)

使用attr代替setAttr (除非您没有使用自定义功能或某些框架/库)

$("#btnEdit").attr( "href", path );

对于自动更改的网址,请查看您是否在.htaccess文件中放置了网址重写,或者是否正在更改其他文件中的网址的代码。

答案 1 :(得分:2)

  

即使我评论,请重新启动网络服务器和浏览器   自动替换〜/ shop / 1   〜/在其网址位置的商店/商店。 ?!

     

我必须评论这些说明,重启服务器等等   避免这个网址更换。

  1. 我有点困惑。你正在评论什么是“它”?
  2. 即使您的替换是针对window.location的变量引用执行的,也应该将“shop”替换为“edit”,因此重定向应该是“mysite / edit / 1”(除非js正则表达式引擎将1视为捕获指数?)
  3. 根据您的REST风格URL,我怀疑您正在使用某种服务器端MVC框架。如果是这样,重定向很可能是服务器端问题,与替换无关。
  4. 最后,不要设置path = window.location,而是将其设置为 window.location.href 。 window.location是对象,它包含URI属性(href,search,hash等)。 window.location.href是完整URL的字符串属性。
  5. 编辑:我决定对自己进行一些测试,并确认问题是您正在设置path = window.location。设置 path = window.location.href ,您的代码就可以使用。

答案 2 :(得分:1)

试试这个

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

答案 3 :(得分:1)

您的问题是path充当window.location的别名,因此path.replace()window.location.replace(),会触发重定向。

解决方案:在.toString()的末尾添加window.location以获取字符串值而不是对象。 var path = window.location.toString()