2011-12-04 39 views
0

我正在調用一個名爲'capital()'的函數,但它不工作,'人均'正在工作。 它是js中的關鍵字還是這是什麼?在javascript中是否有關鍵字'capital'?

這裏是代碼中看到它,測試它

<!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

函數被調用上選擇名單的事件onchange – Bilal

+3

**請告訴我們您的代碼**。 – SLaks

+0

你會得到什麼錯誤? – JJJ

回答

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

鉻示出:

LOCAL:[對象HTMLInputElement]

GLOBAL:功能資本(){}

4

沒有,capital不是JavaScript keyword。它不在當前關鍵字列表或未來保留字列表中。 (甚至不是從以前的規格更長的前列表)

您的代碼的問題是,在某些瀏覽器中,所有name值最終都是全局變量。當然,在全球範圍內宣佈的所有功能也是如此。因此,您的功能capital與標記中帶有name「大寫」的元素之間存在衝突(在這些瀏覽器上)。改變他們任何一個解決問題。 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

相關問題