我正在调用名为'capital()'的函数,但它不起作用且“人均”正在运行。 它是js中的关键字还是这个?
这里是代码看到它,测试它
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTML Select Element</title>
<script type="text/javascript">
function capita(){
alert('yes');
c = new Array("Islamabad", "Tehran", "Bejing", "New Delhi", "Kabul");
var i;
i = document.f1.country.selectedIndex;
document.f1.capital.value=c[i];
}
</script>
</head>
<body>
<h3>Countries and Capital</h3>
<form name="f1" method="post">
The capital of
<select name="country" id="country" onChange="capita();">
<option selected>Pakistan
<option>Iran
<option>China
<option>India
<option>Afghanistan
</select>
is <input type="text" name="capital" value="Islamabad"/>
</form>
</body>
</html>
答案 0 :(得分:6)
capital
是对您的输入元素的引用。
<input type="text" name="capital" value="Islamabad"/>
这是因为当您使用内联处理程序时,某些DOM元素会插入到变量作用域链中。究竟要插入哪些元素在某种程度上取决于浏览器。
如果您将onchange
元素的select
处理程序更改为:
<select name="country" id="country" onChange="alert(capital);">
你会看到它警告:
"[object HTMLInputElement]"
......或类似的东西。
<强> JSFIDDLE DEMO 强>
以下是更新内联处理程序的更新示例,如下所示:
<select name="country" id="country" onChange="alert('LOCAL: ' + capital +
'\n\nGLOBAL: ' + window.capital);">
现在它会提醒capital
和window.capital
。如果您在不同的浏览器中测试它,您可能会得到不同的结果。
<强> JSFIDDLE DEMO 强>
Chrome显示:
LOCAL:[object HTMLInputElement]
GLOBAL:function capital(){}
答案 1 :(得分:4)
不,capital
不是JavaScript keyword。它不在当前关键字列表或未来保留字列表中。 (甚至不是之前规范中较长的前列表。)
您的代码存在的问题是,在某些浏览器中,所有name
值最终都是全局变量。当然,在全球范围内声明的所有功能也是如此。因此,您的函数capital
与标记中带有name
“capital”的元素之间存在冲突(在这些浏览器上)。更改其中任何一个都可以解决问题。特别是Internet Explorer存在此问题。
通常,避免将任何代码符号添加到全局范围(除非您正在编写库,在这种情况下,可以接受命名为唯一合理的单个符号)。例如,您的代码根本不需要任何全局代码符号:
HTML:
<form name="f1" method="post">
The capital of
<select name="country" id="country">
<option selected>Pakistan</option>
<option>Iran</option>
<option>China</option>
<option>India</option>
<option>Afghanistan</option>
</select>
is <input type="text" name="capital" value="Islamabad">
</form>
JavaScript(仅限与全局符号相关的更改;还有其他一些我建议更改的内容):
// Everything within a scoping function
(function() {
// The capitals
var capitals = [
"Islamabad",
"Tehran",
"Bejing",
"New Delhi",
"Kabul"
];
// Hook the window#load event
hookEvent(window, "load", handleLoad);
// Handle the load event
function handleLoad() {
// Hook the "change" event on "country"
hookEvent(
document.getElementById("country"),
"change",
countryChanged
);
}
// Handle a change of the country
function countryChanged(event) {
document.f1.capital.value = capitals[document.f1.country.selectedIndex];
}
// === Utility functions, don't need if you have a decent library
function hookEvent(element, eventName, handler) {
// Very quick-and-dirty, recommend using a proper library,
// this is just for the purposes of the example.
if (typeof element.addEventListener !== "undefined") {
element.addEventListener(eventName, handler, false);
}
else if (typeof element.attachEvent !== "undefined") {
element.attachEvent("on" + eventName, handler);
}
else {
element["on" + eventName] = handler;
}
}
})();