2016-10-26 12 views
5

私はJavaScript関数onClickを呼び出して、取り込んだ値を切り替えようとする簡単なhtmlリンクがあります。動作しません。ここでjavascriptのスイッチケースが変数を取っていない

は私のコードです:

function lang(language) { 
 
    switch (language) { 
 
    case "it-IT": 
 
     alert("Italiano selezionato"); 
 
     break; 
 
    case "en-US": 
 
     alert("English selected"); 
 
     break; 
 
    } 
 
}
<p><a href="#" onClick="lang('en-US');">English</a></p> 
 
<p><a href="#" onClick="lang('it-IT');">Italiano</a></p>

+0

コンソールにエラーはありますか? –

+0

@LucasBaizerいいえ、コンソールにエラーがありません(Dreamweaverを使用しています) – Tony33

答えて

12

ブラウザはすでにそれを使用している、あなたの関数名にlangを使用しないでください。

function xlang(language) { 
 
    switch (language) { 
 
    case "it-IT": 
 
     alert("Italiano selezionato"); 
 
     break; 
 
    case "en-US": 
 
     alert("English selected"); 
 
     break; 
 
    } 
 
}
<p><a href="#" onClick="xlang('en-US');">English</a></p> 
 
<p><a href="#" onClick="xlang('it-IT');">Italiano</a></p>

+1

私はラングをプライベート関数にラップしている限り、ラングを使用することはできませんか?もちろんこれはより良い修正ですが、もし彼が本当に**その関数名を使いたいと思ったら? – Kevin

+1

それはまさにあなたが言ったように、問題を解決した関数名を変更することでした。ありがとう、私はグローバルなlang関数について考えなかった.. – Tony33

+0

@Kevinそれは良い質問 – Mahi

2

問題はここにあります。 onclickイベントハンドラの周囲にはwithが使用されています。これにより、すべてのグローバル属性(langを含む)を使用できます。したがって、グローバルlangプロパティにアクセスしようとします。

ですから、何かに名前を機能していないが、ないattributes

<p><a href="#" onClick="alertLang('en-US');">English</a></p> 
 
<p><a href="#" onClick="alertLang('it-IT');">Italiano</a></p> 
 

 
<script> 
 
    function alertLang(language) { 
 
    switch (language) { 
 
    case "it-IT": 
 
     alert("Italiano selezionato"); 
 
     break; 
 
    case "en-US": 
 
     alert("English selected"); 
 
     break; 
 
    } 
 
} 
 
    </script>

しかし、あなたはJavascript

event handler

<p><a href="#">English</a></p> 
 

 
<script> 
 
    function lang() { 
 
     alert("English selected"); 
 
    } 
 
    
 
    document.querySelector('p').onclick = lang; 
 
    </script>
として追加した場合、それは動作します変更

+0

グローバルlangではありません。 –

0

onclickハンドラにJavaScriptコードを割り当てると、その要素のプロパティがwith (element) { }ブロック内で実行されているように直接利用できる特別なスコープで実行されます。

この例では、変数langは要素のlang属性に対応しています。同じエラーが発生する他の例には、id, title, stylehrefがあります。次のコードを実行するとして考えて:

function lang() { 
} 

with(element) { 
    lang("en-US"); 
    // type error since lang resolves to element.lang 
    // instead of the outer lang 
} 

あなたは単にあなたの機能を、名前空間ができます。

var MyFancyFunctions { 
    lang: function { 
    } 
}; 
<a onclick="MyFancyFunctions.lang('en-US')">English</a> 

それとも、曖昧さを取り除く:

<a onclick="window.lang('en-US')">English</a> 

参考文献:

internal raw uncompiled handler

関連する問題