在onclick属性中使用时,JavaScript函数不起作用

时间:2016-10-26 18:18:30

标签: javascript html variables scope

我有一个简单的html链接,我在其中调用onClick的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>

3 个答案:

答案 0 :(得分:12)

请勿使用lang作为您的功能名称,浏览器已经在使用它。

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

答案 1 :(得分:3)

问题出在这里。在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>名称更改为

&#13;
&#13;
event handler
&#13;
&#13;
&#13;

但如果您在Javascript

中将其添加为<p><a href="#">English</a></p> <script> function lang() { alert("English selected"); } document.querySelector('p').onclick = lang; </script>,则会有效

&#13;
&#13;
// enable all checkboxes
$(".dissable").prop("disabled", false);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

当您将JavaScript代码分配给onclick处理程序时,它将在特殊范围内执行,其中元素的属性可以直接在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

相关问题