我在使用Firefox(v 33.1)中任何可能形式的当前浏览器位置时遇到了麻烦。 如果被jQuery的“就绪”功能读取,则location.href,window.location.href和document.location.href是“未定义的”。同样适用于.hash等。但是,在控制台中,它们会完全返回它们应该的内容。
$(function(){$("a").unbind("click").click($S.r);$S.r();});
$S={
r: function()
{
try{$I=((typeof this.href)?this.href:location.href).replace(/^.*?#/,'');}catch($E){console.error($E);setTimeout(function(){$S.r();},250);return false;}
$S.c($I);
},
c: function($I)
{
$("content").css({"opacity":"0"});
setTimeout(function()
{
$("content spacer").html($S.h($I));
$("content").css({"opacity":"1"});
},1000);
},
h: function($I)
{
switch ($I)
{
case "impressum": return "Impressum";
case "email": return "E-Mail";
case "mitglieder": return "Familien-Mitglieder";
default: return "Startseite";
}
}
};
我想要实现的目标:/ #test将触发脚本加载Test的内容 这在单击链接时有效。在页面加载上,它没有。 控制台中填充相应的变量。他们不是jQuery。 使用setTimeout根本没有帮助。
我应该如何解决这个问题呢?
答案 0 :(得分:2)
错误:
((typeof this.href)?this.href:location.href).replace(/^.*?#/,'')
尝试:
((typeof this.href != 'undefined')?this.href:location.href).replace(/^.*?#/,'')
未定义,不是location.href
,而是this.href
,
因为你的typeof this.href
是字符串'undefined'
,所以在比较时是正确的。