JavaScript中switch语句的作用域

4
我是一个新手,不太理解以下行为。
  1. 当文本框为空时,“process”代码并未将其识别为空,并且没有提示输入文本。

  2. 当文本框中有文本时,“process”代码没有在警报中显示文本。这似乎可能是作用域问题,我认为我的所有变量都是全局的。

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>
3个回答

2

为了进行比较,你需要使用==而不是= :)

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

2

变更

if (textAreaValue = "")

to

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

您正在执行赋值操作而不是进行比较操作。

谢谢。这解决了两个问题。 - Alex_B

0
if (textAreaValue = "")

在 if 语句中,单个等号被解释为赋值操作(它不会抛出错误,因为从技术上讲这是正确的语法,但很多人都会犯这个错误,使用单个等号而不是双等号)。如果你想要比较而不是赋值,正确的语法应该是三个等号。
if (textAreaValue === "")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接