在javascript中有任何关键字'资本'吗?

时间:2011-12-04 14:53:10

标签: javascript jquery

我正在调用名为'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>

2 个答案:

答案 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);"> 

现在它会提醒capitalwindow.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;
    }
  }
})();

Live demo