ActionScript 3.0条件判断异常求助:所有输入均走Else分支
解决ActionScript 3.0 IF-ELSE判断始终进入Else分支的问题
我来帮你排查这个问题,其实根源主要在变量作用域和可能的输入空格两个地方,咱们一步步解决:
问题原因分析
- 变量作用域问题:你在第一页定义的
myName是帧局部变量,只在第一页的脚本上下文里有效,第二页的脚本根本访问不到这个变量的值!这就导致第二页的myName其实是undefined,自然每次都会触发else分支。 - 潜在的输入空格问题:用户输入姓名时可能不小心前后加了空格(比如输入"Ace "而不是"Ace"),这种情况下字符串匹配也会失败,同样进入else分支。
修复后的代码
第一页代码修改:
import flash.events.MouseEvent; stop(); // 将myName定义为主时间轴的属性,让所有帧都能访问到 this.myName = nameField.text; ClickBtn.addEventListener(MouseEvent.CLICK, movingtopagetwo); function movingtopagetwo(event:MouseEvent):void { // 用trim()去掉输入文本的前后空白,避免空格导致匹配失败 this.myName = nameField.text.trim(); gotoAndPlay("PageTwo"); }
第二页代码修改:
trace("Input just now = " + this.myName); if (this.myName == "Ace") { ResultText.text = "You are number one, " + this.myName; } else if (this.myName == "Blue") { ResultText.text = "You color my life, " + this.myName; } else if (this.myName == "Crow") { ResultText.text = "You are free, " + this.myName; } else { ResultText.text = "You are unknown, " + this.myName; }
关键修改点说明
- 作用域修复:用
this.myName替代原来的局部变量myName,把变量挂载到主时间轴上,这样不同帧的脚本都能共享这个变量的值。 - 空格处理:调用
trim()方法可以自动去除输入字符串首尾的空格、制表符等空白字符,避免用户误输入导致的匹配失败。
额外调试技巧
如果以后再遇到类似问题,可以在第二页的trace里加这些内容,快速定位问题:
trace("变量类型:" + typeof this.myName); trace("字符串长度:" + this.myName.length);
这样能立刻看出变量是不是未定义,或者有没有多余的空格字符。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

