Javascript:为什么我的输入验证不起作用?
这是我正在进行的验证,但似乎无法正确进行。当我输入正确的pin码“12345”时,它工作正常,函数Done()显示警报“Well Done”。然而,我在引脚上输入了3次失败的尝试,它确实显示了一个错误,但是当错误发生后程序应该停止时,函数Done仍然激活。有什么解决办法吗Javascript:为什么我的输入验证不起作用?,javascript,Javascript,这是我正在进行的验证,但似乎无法正确进行。当我输入正确的pin码“12345”时,它工作正常,函数Done()显示警报“Well Done”。然而,我在引脚上输入了3次失败的尝试,它确实显示了一个错误,但是当错误发生后程序应该停止时,函数Done仍然激活。有什么解决办法吗 <head> <script> valid = false; function Start(valid) { check(valid
<head>
<script>
valid = false;
function Start(valid) {
check(valid);
if (valid = true) {
Done();
}
if (valid = false) {
alert('End');
return;
}
}
function check(valid) {
var PinNum;
var Attempts = 0;
while (Attempts < 3) {
Attempts = (Attempts + 1);
PinNum = prompt('Enter the pin number');
if (PinNum == '12345') {
alert('Welcome!');
valid = true;
return valid;
return;
} else {
alert('Wrong pin number, this is attemp ' + Attempts + ' of 3');
}
}
alert('Too many failed attempts, giving up');
return;
}
function Done() {
alert("well done")
}
</script>
</head>
<body>
<button onclick="Start()">Start</button>
</body>
</html>
有效=错误;
功能启动(有效){
支票(有效);
if(valid=true){
完成();
}
如果(有效=错误){
警报(“结束”);
返回;
}
}
功能检查(有效){
羽状变种;
var=0;
而(尝试次数<3次){
尝试次数=(尝试次数+1);
PinNum=提示(“输入pin编号”);
如果(羽片=='12345'){
警惕(“欢迎!”);
有效=真;
返回有效;
返回;
}否则{
警报('错误的pin码,这是尝试'+尝试+'共3次');
}
}
警报(“尝试失败太多,放弃”);
返回;
}
函数完成(){
警惕(“干得好”)
}
开始
在if else
语句中,您将true
赋值给valid
,而不是比较它们。您可以将这些语句简化为:
var valid = false;
function Start() {
check();
if (valid) {
Done();
} else {
alert('End');
}
}
function check() {
var PinNum;
var Attempts = 0;
while (Attempts < 3) {
Attempts = (Attempts + 1);
PinNum = prompt('Enter the pin number');
if (PinNum == '12345') {
alert('Welcome!');
valid = true;
return;
} else {
alert('Wrong pin number, this is attemp ' + Attempts + ' of 3');
}
}
alert('Too many failed attempts, giving up');
return;
}
function Done() {
alert("well done")
}
var valid=false;
函数Start(){
检查();
如果(有效){
完成();
}否则{
警报(“结束”);
}
}
函数检查(){
羽状变种;
var=0;
而(尝试次数<3次){
尝试次数=(尝试次数+1);
PinNum=提示(“输入pin编号”);
如果(羽片=='12345'){
警惕(“欢迎!”);
有效=真;
返回;
}否则{
警报('错误的pin码,这是尝试'+尝试+'共3次');
}
}
警报(“尝试失败太多,放弃”);
返回;
}
函数完成(){
警惕(“干得好”)
}
有几项:
Start
函数中的变量valid
与函数外部定义的变量不同。每次单击按钮时,undefined
将传递给函数。您应该仔细阅读JavaScript范围-valid=true
是一个赋值。单等号表示“分配给”,而双等号或三等号表示比较。您应该仔细阅读比较运算符-有效的变量。这里有一个可能的解决方案-
函数start(){
如果(u是否有效()){
完成();
}否则{
警报(“结束”);
返回;
}
}
函数是有效的(){
羽状变种,
尝试次数=0;
而(尝试次数<3次){
尝试次数=(尝试次数+1);
PinNum=提示(“输入pin编号”);
如果(羽片=='12345'){
警惕(“欢迎!”);
返回true;
}否则{
警报('错误的pin码,这是尝试'+尝试+'共3次');
}
}
警报(“尝试失败太多,放弃”);
返回false;
}
函数完成(){
警惕(“干得好”)
}
开始
使用调试器并调试您的代码您刚刚传递了valid
作为参数,使其成为check函数的本地参数,因此在check函数内部更改valid
不会影响函数外部的valid
,这是两个不同的变量。但我需要确保valid为true。使用您的方法,my function Done()不起作用。@user3746770,当valid==true
时,if(valid)
等同于if(true)
。如果这还不能解决问题,还有其他原因problem@user3746770,我已经清理了你的代码。现在可以了。
<!DOCTYPE html>
<html>
<head>
<script>
function start() {
if (is_valid()) {
Done();
} else {
alert('End');
return;
}
}
function is_valid() {
var PinNum,
Attempts = 0;
while (Attempts < 3) {
Attempts = (Attempts + 1);
PinNum = prompt('Enter the pin number');
if (PinNum == '12345') {
alert('Welcome!');
return true;
} else {
alert('Wrong pin number, this is attempt ' + Attempts + ' of 3');
}
}
alert('Too many failed attempts, giving up');
return false;
}
function Done() {
alert("well done")
}
</script>
</head>
<body>
<button onclick="start()">Start</button>
</body>
</html>