达明,如狐狸过水;机警,如战场上的将军;和善,如主妇款待客人;简单,呆若木鸡;混沌,如深渊之水。

Javascript之回到过去 论window.location.href = window.location.href刷新页面的问题

在JS中可以用window.location.href = window.location.href来刷新页面(当然还有很多其他的方法),

在使用这个方法刷新页面的时候回出现问题,如下:

 

Code

 

分析这段代码你会发现,当点击###后,再点击Button页面不会刷新。

想必看到这里你已经知道问题所在,就是在点击###后,Url上会加上一个#,

于是refresh()方法就变成了 window.location.href ="www.something.com/test.aspx#"

成为了一个锚点。

我的解决方法也很简单:window.location.href = window.location.href.replace(/#/g,''); 替Url中的换所有#

一般来说这样替换不会有问题,url中一般不含有#,替换后也不会导致链接失效。

PS:虽然只是一个小问题,但开发时还是要注意。

 

每个人都会经过这个阶段,见到一座山,就想知道山后面是什么。我很想告诉他,可能翻过山后面,你会发现没什么特别。回望之下,可能会觉得这一边更好。 每个人都会坚持自己的信念,在别人看来,是浪费时间,她却觉得很重要。
posted @ 2008-11-20 12:01 amingo 阅读(2425) 评论(35)  编辑 收藏 网摘

  回复  引用  查看    
#1楼 2008-11-20 12:14 | 韦恩卑鄙      
其实如果叶面真的有锚点应用了 你这样又变得不合适了

我记得有location.reload 方法的 能给我讲讲为什么要用

window.location.href = window.location.href么 三年多没做web ui了 已经忘记差不多了 还请共享下~~~
  回复  引用  查看    
#2楼 2008-11-20 12:26 | 痴情客      
location.reload()不是要你用来刷新的吗?弄这旁门左道?
  回复  引用    
#3楼 2008-11-20 13:04 | Chairo [未注册用户]
<a href="java:void(0)">###</a>
  回复  引用    
#4楼 2008-11-20 13:05 | Chairo [未注册用户]
<a href="javascript:void(0)">###</a>
汗,居然打错
  回复  引用  查看    
#5楼 [楼主]2008-11-20 13:07 | amingo      
--引用--------------------------------------------------
痴情客: location.reload()不是要你用来刷新的吗?弄这旁门左道?
--------------------------------------------------------

我之前就说了刷页面就很多方法,但location.reload()和
window.location.href = window.location.href 这有区别的!

区别在于:
如果在reload之前想服务器提交过数据,那么执行reload会重新执行这个提交操作。
而window.location.href = window.location.href 则不会,因为它是重新进入页面。
  回复  引用  查看    
#6楼 [楼主]2008-11-20 13:21 | amingo      
接5楼~~~~
aspx:
<body>
<form id="form1" runat="server">
<div>
<input id="Button2" type="button" value="reload" onclick="window.location.reload();" />
<input id="Button3" type="button" value="href" onclick="window.location.href= window.location.href;" />

<asp:Button ID="Button1" runat="server" Text="刷新前先点我" OnClick="Button1_Click" />
</div>
</form>
</body>

cs:
protected void Button1_Click(object sender, EventArgs e)
{
string s = string.Empty; //在这里设置断点
}
先点“button1”,然后点reload,你会发现此时也会进入断点,而点href就不会。
  回复  引用  查看    
#7楼 2008-11-20 13:40 | Areyan      
多謝分享,學習了!
  回复  引用  查看    
#8楼 2008-11-20 13:41 | 韦恩卑鄙      


页面产生可能是一个post的结果 也可能是一个get的结果 也可能是get和post混合的结果
你的希望是去掉上次所有的post信息 但是保留get所有的信息?

这个需求有点怪:D 如果我设计站的架构 是会尽力回避这样的流程出现的。你确实做到了 但是万一本页面真的需要传递锚点信息的话 你会把锚点信息删除

所以我建议直接增加一个无意义参数比较好
比如说
a.aspx?id=1#a
替换成
a.aspx?id=1&timestmp=yyyymmddrandom#a

这样保证前面get 的url的get参数有所变化 location.href修改后 浏览器也会强制刷新 后面的锚点也不会丢失

希望能对你有所帮助
  回复  引用  查看    
#9楼 2008-11-20 13:43 | HarborHouse      
直接window.location.href=window.location.pathname不就完了嘛!如果有参数的话 window.location.href=window.location.pathname+window.location.search
  回复  引用  查看    
#10楼 2008-11-20 13:46 | 韦恩卑鄙      
--引用--------------------------------------------------
直接window.location.href=window.location.pathname不就完了嘛!如果有参数的话
window.location.href=window.location.pathname+window.location.search
--------------------------------------------------------


lz的要求是 “希望是去掉上次所有的post信息 但是保留get所有的信息 适当抛弃锚点” 你做到了~~

我的方案是 “希望是去掉上次所有的post信息 但是保留get所有的信息 也不抛弃锚点”


赫赫
@HarborHouse咱们一起改
  回复  引用  查看    
#11楼 [楼主]2008-11-20 13:50 | amingo      
@韦恩卑鄙

不错的方法。
  回复  引用  查看    
#12楼 2008-11-20 13:56 | HarborHouse      
这个回复功能有问题吗,我修改了回复之后,再回复,还是修改,郁闷了,要重新进才行~
window.location.href=window.location.pathname+window.location.search+location.hash
  回复  引用  查看    
#13楼 2008-11-20 13:56 | 韦恩卑鄙      
@HarborHouse
貌似你要回复以后 点下面的连接“修改成功! 继续发表评论, 请点击。 ”刷新本页才能继续

window.location.pathname+window.location.search+location.hash
最后这个成功的得出了完全的字符串 但是因为里面有# 而前面的地址仍然没有变化 只有#后面的矛点变了
所以url对于ie的认证来说 还是没有变化 仍然不会刷新
话说第一次知道 hash 是做这个用的 试验了下 果然是#后面的东西。。。 也算学到了东西 谢谢
  回复  引用  查看    
#14楼 2008-11-20 14:03 | HarborHouse      
@韦恩卑鄙
可以加MSN讨论下电子商务,或者购物车的内容么,上次看你讨论得蛮激烈的!

  回复  引用  查看    
#15楼 2008-11-20 14:07 | 韦恩卑鄙      
--引用--------------------------------------------------
HarborHouse: @韦恩卑鄙
可以加MSN讨论下电子商务,或者购物车的内容么,上次看你讨论得蛮激烈的!

--------------------------------------------------------
邮件和msn都是 blackshaman_wayne@hotmail.com


T_T 公司不能开msn
邮件的话过几天可能能用


  回复  引用  查看    
#16楼 2008-11-20 14:12 | HarborHouse      

 不能上MSN,那算咯!问个问题,在电子商务网站中,如果一个月前的订单一个月后来付款,是应该付现在的价格,还是应该付一个月前的价格,领导和我说要为用户着想,下订单什么价,就付什么价,但是那财务那块就会乱了,价格随时会变的!


  回复  引用  查看    
#17楼 [楼主]2008-11-20 14:16 | amingo      
--引用--------------------------------------------------
HarborHouse: <p><img src="http://www.cnblogs.com/Emoticons/msn/sad_smile.gif" alt="" />&nbsp;不能上MSN,那算咯!问个问题,在电子商务网站中,如果一个月前的订单一个月后来付款,是应该付现在的价格,还是应该付一个月前的价格,领导和我说要为用户着想,下订单什么价,就付什么价,但是那财务那块就会乱了,价格随时会变的!</p>

--------------------------------------------------------
你们领导说的是对的。你可想象一下房贷。
  回复  引用  查看    
#18楼 2008-11-20 14:17 | 韦恩卑鄙      
一般这种情况 领导说啥就是啥 财务也得买老板帐啊
把成交日期计算成下单当日 然后流程标记为欠款或分期付款 财务就不会说什么了

但是 要为用户着想 万一要是降价了 也要提醒用户 要不要放弃原来的价格的订单 所以就会变成退货流程了

问题出在领导和财务之间 你是受害者 还是找个机会拉他们出来打架 你看热闹比较好



咱们别在这里交流了 欺负人家amingo

  回复  引用  查看    
#19楼 [楼主]2008-11-20 14:18 | amingo      
--引用--------------------------------------------------
HarborHouse: <p><img src="http://www.cnblogs.com/Emoticons/msn/sad_smile.gif" alt="" />&nbsp;不能上MSN,那算咯!问个问题,在电子商务网站中,如果一个月前的订单一个月后来付款,是应该付现在的价格,还是应该付一个月前的价格,领导和我说要为用户着想,下订单什么价,就付什么价,但是那财务那块就会乱了,价格随时会变的!</p>

--------------------------------------------------------
问题的关键在于,用户是什么时候拿到商品,应该是按拿到商品时的价钱。

  回复  引用  查看    
#20楼 2008-11-20 14:26 | 韦恩卑鄙      

问题的关键在于,用户是什么时候拿到商品,应该是按拿到商品时的价钱。

--------------------------------------------------------
按照合同来说 合同是订单 规定了双方的权利和义务 下单的时候的价格是哪个应该没错。

涨价了或者降价了这种情况 在完成双方该规定义务前 是可以通过协商的方式来撤回合同的, (这里包括退款和退货 )。 但是任何一方都有权利拒绝撤回和修改。

这老板很仁义 对自己要求高 就算涨价了也要按照下单时间的价格发货。这是为客户着想,
咱们可以提醒下 物品降价了用户可以协商重新定价也是这一范畴的仁义哈哈
  回复  引用    
#21楼 2008-11-20 16:17 | zjfeiye [未注册用户]
貌似location.reload(true)可以做到不提交刷新
  回复  引用  查看    
#22楼 2008-11-20 16:20 | xjb      
细节出才体现真工夫
  回复  引用  查看    
#23楼 [楼主]2008-11-20 16:24 | amingo      
--引用--------------------------------------------------
zjfeiye: 貌似location.reload(true)可以做到不提交刷新
--------------------------------------------------------
我试了,还是会提交。
  回复  引用  查看    
#24楼 2008-11-20 16:29 | flankerfc      
学习~
  回复  引用  查看    
#25楼 2008-11-20 18:33 | 怪怪      
这段话太好了:

“每个人都会经过这个阶段,见到一座山,就想知道山后面是什么。我很想告诉他,可能翻过山后面,你会发现没什么特别。回望之下,可能会觉得这一边更好。 每个人都会坚持自己的信念,在别人看来,是浪费时间,她却觉得很重要。”

  回复  引用    
#26楼 2008-11-20 18:59 | old_Sleet [未注册用户]
--引用--------------------------------------------------
amingo: --引用--------------------------------------------------
痴情客: location.reload()不是要你用来刷新的吗?弄这旁门左道?
--------------------------------------------------------

我之前就说了刷页面就很多方法,但location.reload()和
window.location.href = window.location.href 这有区别的!

区别在于:
如果在reload之前想服务器提交过数据,那么执行reload会重新执行这个提交操作。
而window.location.href = window.location.href 则不会,因为它是重新进入页面。
--------------------------------------------------------
其实reload也有一个重载参数,就是可以带入一个布尔值,好像设置一下就可以解决这个问题。
  回复  引用  查看    
#27楼 2008-11-20 20:23 | Cat Chen      
本来href="#"就是错误用法!
  回复  引用  查看    
#28楼 2008-11-20 22:24 | cloudgamer      
但就刷新来说reload比较好,而且有参数可以设
  回复  引用  查看    
#29楼 2008-11-21 00:53 | 刘守照      
reload不行么 有时间试试看 我经常使用reload(false)
  回复  引用  查看    
#30楼 [楼主]2008-11-21 08:39 | amingo      
方法是多种多样的,18般兵器哪种用好了都威力无穷。
  回复  引用  查看    
#31楼 2008-11-21 09:15 | 光年      
reload我也经常用 没问题的
  回复  引用    
#32楼 2008-11-21 10:08 | nianshi [未注册用户]
虽然问题本身是个很简单的问题,但是看了大爱的讨论还是学到不少啊,尤其是:
[quote]
直接window.location.href=window.location.pathname不就完了嘛!如果有参数的话 window.location.href=window.location.pathname+window.location.search
[/quote]
之前好像都没有这样用过啊 JS的功能还真是丰富啊……
  回复  引用  查看    
#33楼 2008-11-21 10:49 | 随机      
location.reload(false)从缓存中获取页面
location.reload(true)从服务器上获取页面
  回复  引用  查看    
#34楼 [楼主]2008-11-21 10:54 | amingo      
warning!
warning!
warning!
warning!
reload(true,false) 都会引发重复提交!

aspx
<input id="Button2" type="button" value="reload(false)" onclick="window.location.reload(false);" />
<input id="Button4" type="button" value="reload(true)" onclick="window.location.reload(true);" />
<input id="Button3" type="button" value="href" onclick="window.location.href= window.location.href;" />
<asp:Button ID="Button1" runat="server" Text="刷新前先点我" OnClick="Button1_Click" />

cs:
protected void Button1_Click(object sender, EventArgs e)
{
string s = string.Empty; //断点

}
  回复  引用    
#35楼 2008-11-21 11:47 | elsee [未注册用户]
@HarborHouse
下單時間和交易時間分開!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:


相关搜索:
刷新页面 javascript

相关链接:
 

身是对象树,心如类般明;对象本无根,类型亦无形。