我有一个简单的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>
答案 0 :(得分:12)
请勿使用lang
作为您的功能名称,浏览器已经在使用它。
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;
答案 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>
名称更改为
event handler
&#13;
但如果您在Javascript
<p><a href="#">English</a></p>
<script>
function lang() {
alert("English selected");
}
document.querySelector('p').onclick = lang;
</script>
,则会有效
// enable all checkboxes
$(".dissable").prop("disabled", false);
&#13;
答案 2 :(得分:0)
当您将JavaScript代码分配给onclick
处理程序时,它将在特殊范围内执行,其中元素的属性可以直接在with (element) { }
块中运行。
在您的示例中,lang
变量对应于元素的lang
属性。导致相同错误的其他示例包括id
, title
, style
和href
。可以将其视为执行以下代码:
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>
参考文献: