2012-08-28 68 views
4

我是Javascript新手,不理解以下行爲。開關語句中的Javascript作用域

  1. 當textarea爲空時,「process」代碼不會將其識別爲null,並且不會提示輸入文本。

  2. 當文本區域中有文本時,「進程」代碼不顯示警報中的文本。看起來這可能是一個範圍問題,我認爲我所有的變量都是全局的。

HTML代碼:

<input type="button" name="btnProcessTA" onclick="myTextArea('process')" value="Process Text Area" /> 
<input type="button" name="btnClearTA" onclick="myTextArea('clear')" value="Clear Text Area" /> 

<form id="formExample" action="" method="get"> 
    <label for="textAreaField">A text area field</label> 
    <textarea name="textAreaField" id="textAreaField" rows="4" cols="50"></textarea> 
</form> 

Javascript代碼:

<script type="text/javascript"> 
function myTextArea(op) 
{ 
oTextArea = document.getElementById("textAreaField"); 
textAreaValue = oTextArea.value;   
alert(op + "\n" + oTextArea + "\n" + textAreaValue); 

switch (op){ 
    case "clear": 
    oTextArea.value = ""; 
    alert("Clearing"); 
    break; 

    case "process": 
    if (textAreaValue = "") 
     alert("Would you please enter some text?"); 
    else 
     alert("You entered:\n\n" + textAreaValue); 
    break; 

    default : alert("unknown op code"); 
    } 
} 
</script> 

回答

2

變化

if (textAreaValue = "") 

if (textAreaValue === "") // or == 

您要執行的任務,而不是做一個比較。

+0

謝謝。這解決了這兩個問題。 –

2

比較,你必須使用==,而不是= :)

case "process": 
if (textAreaValue == "") 
    alert("Would you please enter some text?"); 
else 
    alert("You entered:\n\n" + textAreaValue); 
break; 
0
if (textAreaValue = "") 

if語句單等號被解釋爲分配(因爲在技術上它是正確的語法,它不會引發錯誤,但很多人通過使用一個等號,而不是雙犯這個錯誤等號)。如果您打算比較而不是分配,則正確的語法是三重等號。

if (textAreaValue === "")