我遇到以下代码的问题,如果有人能帮助我,我会非常感激。基本上我在调用网址的页面上的几个页面上有几个链接。目前,即使在窗口中打开了extraten页面,它也只在代码的/freeten/
部分内调用该函数。
if(location.href.match('/extraten/')) {
console.log(window.location.href);
function downloadXM() {
if(location.href.match('/en/')) {
window.location.href = "http://core77.com/";
}
if(location.href.match('/fr/')) {
window.location.href = "http://www.notcot.org/";
}
if(location.href.match('/de/')) {
window.location.href = "http://www.spd.org/";
}
if(location.href.match('/it/')) {
window.location.href = "http://sxsw.com/";
}
}
}
if(location.href.match('/freeten/')) {
function downloadXM() {
if(location.href.match('/en/')) {
window.location.href = "http://www.wired.com/";
}
if(location.href.match('/fr/')) {
window.location.href = "http://www.bbc.co.uk/";
}
if(location.href.match('/de/')) {
window.location.href = "http://edition.cnn.com/";
}
if(location.href.match('/it/')) {
window.location.href = "http://www.sky.com/";
}
}
}
答案 0 :(得分:6)
不要以这种方式声明函数,而是尝试这样做:
var myFunc;
if (something) {
myFunc = function () { ... }
} else if (something) {
myFunc = function () { ... }
}
答案 1 :(得分:1)
这是最简单的改变。 不优雅,但可扩展为noobs
function downloadXM() {
window.console && console.log(window.location.href); // helping IE
if (location.href.match('/extraten/')){
if (location.href.match('/en/')){
window.location.href= "http://core77.com/";
}
if (location.href.match('/fr/')) {
window.location.href= "http://www.notcot.org/";
}
if (location.href.match('/de/')) {
window.location.href= "http://www.spd.org/";
}
if (location.href.match('/it/')) {
window.location.href= "http://sxsw.com/";
}
}
else if (location.href.match('/freeten/')){
if (location.href.match('/en/')){
window.location.href= "http://www.wired.com/";
}
if (location.href.match('/fr/')) {
window.location.href= "http://www.bbc.co.uk/";
}
if (location.href.match('/de/')) {
window.location.href= "http://edition.cnn.com/";
}
if (location.href.match('/it/')) {
window.location.href= "http://www.sky.com/";
}
}
答案 2 :(得分:0)
Javascript将函数声明提升到函数顶部,以便第一个downloadXM()
声明被第二个downloadXM()
覆盖。 Javascript没有任何块范围,就像你试图用if语句做的那样。
答案 3 :(得分:0)
另外一项,您正在使用.match(<RegExp>)
,它实际上返回您正在使用的RegExp模式的字符串中所有匹配项的数组。在这种情况下,您可能想要使用的是<RegExp>.test()
,它返回true
或false
,以确定RegExp模式是否与字符串值匹配。
在您的代码中使用此示例:
if (location.href.match('/extraten/')) {
。 。 。会成为:
if (/extraten/.test(location.href.match)) {
修改 - 我并不是说这是导致您出现问题的原因,但是当我使用match()
测试您的代码时,我得到了不一致的结果。将其切换为使用test()
解决了这些问题。