javascript - JavaScript 表单验证意外工作并打印未定义
问题描述
我正在尝试编写一个简单的 Vanilla JS 函数,该函数将检查用户是否将任何表单字段留空,如果是这种情况,则提醒用户。不幸的是,它不太有效,我不知道为什么。
正如,你可以看到它说“未定义不能留空”。
这是JS代码:
var username= document.getElementById("UsernameInput");
var email= document.getElementById("EmailInput");
var pass= document.getElementById("PasswordInput");
var confirmPass= document.getElementById("ConfirmPasswordInput");
var form= document.querySelector(".registration-form");
// Function for checking empty input
function checkEmpty(inputArr){
for(i=0;i<inputArr.length;i++){
if(inputArr[i].value.trim()==='')
var stringified= JSON.stringify(inputArr[i]);
alert(`${stringified} can't be left empty`);
console.log(inputArr[i]);
break;
}
}
form.addEventListener("submit", function(e){
if(checkEmpty([username,email,pass,confirmPass]));
e.preventDefault();
})
那么,为什么“字符串化”变量未定义?(我使用 JSON.stringify 是因为当我不这样做时它正在返回 [object object])。
这是表单的 HTML:
<form action="#" class="registration-form ">
<div class="row ">
<div class="six columns ">
<label for="username">Your username (has to be unique)</label>
<input class="u-full-width" type="text" placeholder="redditStar" id="UsernameInput" name="username">
</div>
</div>
<div class="row">
<div class="six columns">
<label for="email">Your email</label>
<input class="u-full-width" type="email" placeholder="test@emailcom" id="EmailInput" name="email">
</div>
</div>
<div class="row">
<div class="six columns">
<label for="password">Your password</label>
<input class="u-full-width" type="password" placeholder="Enter a strong password" id="PasswordInput" name="password">
</div>
</div>
<div class="row">
<div class="six columns">
<label for="confirm-password">Confirm your Password</label>
<input class="u-full-width" type="password" placeholder="Confirm password.." id="ConfirmPasswordInput" name="passwordConfirm">
</div>
</div>
<input class="button-primary submitRegister" type="submit" value="Submit">
</form>
解决方案
问题是你在 for 中的 if 语句。
for(i=0;i<inputArr.length;i++){
if(inputArr[i].value.trim()==='')
var stringified= JSON.stringify(inputArr[i]);
alert(`${stringified} can't be left empty`);
console.log(inputArr[i]);
break;
}
当您的 if 缺少花括号时,遵循 javascript 的缩进规则,如果表达式为真,则仅运行下一行。如果为假,则跳过下一行。因此,当 if 为 false 时,它会跳转到alert(``${stringified} can't be left empty``);
未定义的 stringified,因为它之前没有在行上定义。
推荐阅读
- python - 如何知道 GEKKO 花了多长时间解决我的模型?
- ios - 加载类时 UITableViewCell UIView 颜色不会立即更改
- azure - Update-AzureRmVmss、Update-AzureRmVmssInstance 和 Update-AzureRmVmssVM 有什么区别?
- azure-devops - Azure Devops - 用户故事描述/接受标准字段中的 Markdown 支持?
- oracle - Oracle APEX - 默认主键值“t1000”
- c++ - 等待 MPI-IO 在 MPI_File_open 上同步的进程旋转
- javascript - 使 Google Chrome 浏览器图标在任务栏上闪烁
- linux - 如何在linux中重新排序数百个制表符分隔文件的列?
- javascript - 如何在点击时更改字体真棒图标
- node.js - Await 不会暂停执行