3

誰かが私を助けてくれれば、次のコードに問題があります。基本的に、URLを呼び出すページのいくつかのページにいくつかのリンクがあります。現時点では/freeten/、extraten ページがウィンドウで開いている場合でも、コードの一部内でのみ関数を呼び出しています。

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/";
        }

    }
}
4

4 に答える 4

6

Instead of declaring functions that way, try doing this:

var myFunc;

if (something) {
    myFunc = function () { ... }
} else if (something) {
    myFunc = function () { ... }
}
于 2013-04-09T15:49:37.783 に答える
1

最も簡単な変更はこれです。エレガントではありませんが、初心者向けに拡張可能です

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/";
    }
}
于 2013-04-09T15:53:31.153 に答える
0

Javascript は関数宣言を関数の先頭に持ち上げるので、最初の の宣言はdownloadXM()2 番目の によって上書きされますdownloadXM()。Javascript には、if ステートメントで実行しようとしているようなブロック スコープはありません。

于 2013-04-09T15:46:56.693 に答える
0

使用しているもう 1 つの項目は、使用.match(<RegExp>)している RegExp パターンの文字列内のすべての一致の配列を実際に返します。この場合、おそらく使用したいのは です。これは、正規表現パターンが文字列値で一致するかどうかに対してまたは<RegExp>.test()を返します。truefalse

コードからこの例を使用します。

if (location.href.match('/extraten/')) {

. . . 次のようになります。

if (/extraten/.test(location.href.match)) {

編集- これが問題の原因であると言っているわけではありませんが、match(). 使用するように切り替えると、test()これらの問題は解決しました。

于 2013-04-09T15:58:11.583 に答える