switch语句中的Javascript范围

时间:2012-08-28 19:09:45

标签: javascript scope switch-statement

我是Javascript的新手并且不了解以下行为。

  1. 当textarea为空时,“process”代码不会将其识别为null,并且不会提示输入文本。

  2. 当textarea中有文本时,“进程”代码不会显示警报中的文本。看来这可能是一个范围问题,我认为我的所有变量都是全局的。

  3. HTML code:

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

3 个答案:

答案 0 :(得分:2)

要进行比较,您必须使用==代替=:)

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

答案 1 :(得分:2)

更改

if (textAreaValue = "")

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

您正在执行作业而不是进行比较。

答案 2 :(得分:0)

if (textAreaValue = "")

if语句中的单个等号被解释为赋值(它不会抛出错误,因为从技术上讲它是正确的语法,但很多人通过使用单个等号而不是双等号来犯这个错误)。如果您打算比较而不是赋值,则正确的语法将是三等号。

if (textAreaValue === "")