Javascript 如何使输入成为必需的

Javascript 如何使输入成为必需的,javascript,html,Javascript,Html,我想要的是,当两个字段,即fname和lname保持为空时,弹出窗口应显示两条消息,即“必须填写名字”,“必须填写姓氏” 我需要做哪些修改 <!DOCTYPE html> <html> <head> <script> function validateForm() { var x = document.forms["myForm"]["fname"].value; if (x

我想要的是,当两个字段,即
fname
lname
保持为空时,弹出窗口应显示两条消息,即“必须填写名字”,“必须填写姓氏”

我需要做哪些修改

<!DOCTYPE html>
<html>
<head>
    <script>
        function validateForm() {
            var x = document.forms["myForm"]["fname"].value;
            if (x == null || x == "") {
                alert("First name must be filled out");
                document.myForm.fname.focus();
                return false;
            }

            var y = document.forms["myForm"]["lname"].value;
            if (y == null || y == "") {
                alert("Last name must be filled out");
                document.myForm.lname.focus();
                return false;
            }
        }
    </script>
</head>
<body>

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">First name:
    <input type="text" name="fname">Last name:
    <input type="text" name="lname">
    <input type="submit" value="Submit">
</form>

</body>

函数validateForm(){
var x=document.forms[“myForm”][“fname”].value;
如果(x==null | | x==“”){
警告(“必须填写姓名”);
document.myForm.fname.focus();
返回false;
}
var y=document.forms[“myForm”][“lname”].value;
如果(y==null | | y==“”){
警告(“必须填写姓氏”);
document.myForm.lname.focus();
返回false;
}
}
名字:
姓氏:

也许这会给你一些关于如何继续的想法:

function validateForm() {
    var errors = [],
        fname = document.forms["myForm"]["fname"],
        lname = document.forms["myForm"]["lname"];

    if (lname.value == "") {
        errors.unshift("Last name must be filled out");
        lname.focus();
    }
    if (fname.value == "") {
        errors.unshift("First name must be filled out");
        fname.focus();
    }
    if (errors.length > 0) {
        alert("Cannot submit\n" + errors.join("\n"));
        return false;
    }
}
演示:

您会注意到的第一件事是,它更容易阅读,因为块是缩进的。此外:

  • 您当前使用
    document.forms[“myForm”][“fname”]
    document.myForm.fname
    访问同一字段。选择一种方法并始终如一地使用,或
  • 创建一个引用字段
    fname
    的变量,然后使用
    fname.value
    fname.focus()
  • 不要费心测试
    null
    ,因为
    .value
    属性永远不会被删除
  • 不要立即发出错误警报并返回,而是将错误文本添加到数组中,然后在测试结束时如果数组为空

尝试验证您的字段:

if (!x || x.length == 0)

您可以使用Hthml 5
required
。它是如此简单和整洁

<form>
First name: <input type="text" name="fname" required="required">
Last name: <input type="text" name="lname" required="required">
<input type="submit" value="Submit">
</form>

名字:
姓氏:


注意:Internet Explorer 10、Firefox、Opera和Chrome都支持
required
属性。但Internet Explorer 9和早期版本或Safari中不支持此功能。

根据validateForm函数,您的代码永远不会检查第二个字段。使用return语句时,函数将停止执行,并返回指定的值。 解决方案是使用嵌套的if语句并检查一个条件块中的两个字段

if (x==null || x=="")
{
    if (y==null || y=="")
    {
    //codes for both are not validated
    }
    else
    {
    //codes for just x is not validated
    }
}
else
    if (y==null || y=="")
    {
    //codes for y is not validated
    }
    else
    {
    //codes for all validated
    }

这样,在每个块中使用return语句不会中断函数执行

请搜索“验证输入是否为空”,有数百个结果。如果您在Chrome中使用Firefox,打开控制台确实很有帮助。控制台应该告诉您发生了什么错误,以便您知道必须修复什么。您还可以直接在控制台中键入javascript来测试内容,而无需创建一个全新的文件。记住,客户端从来都不需要它。确保在服务器端验证同样多(如果不是更多的话)。另一个选项是使用jQuery和验证插件。既然OP的代码
x
是一个字符串,为什么要测试
!x
以及
x.length
?此外,问题是如何更改代码以显示有关这两个字段的单个错误消息。请重新阅读-不是单个错误,而是两个错误!x表示不为null且未定义等。长度>0表示x不为空。抱歉,长度==0表示为空。x是字符串(因为.value属性返回的是字符串),因此永远不会为null或未定义!如果x是空字符串,则x将为真,因此长度检查是多余的。而且(再次)OP希望将x和y验证组合在一起,以便生成一条消息。你赢了,祝贺你!这是一个很好的整洁的方式,但它。(尽管考虑到OP也需要服务器端验证,但如果客户端验证不适用于旧IE,这可能并不重要。)@nnnnnn我正要更新我的答案:)…我知道这是有限的,但现在是我们应该开始使用html5属性的时候了,尽管我同意你的观点,它不兼容所有的浏览器。对于初学者来说清晰易懂+1.