Javascript for循环似乎在第一次迭代后退出或卡住

Javascript for循环似乎在第一次迭代后退出或卡住,javascript,for-loop,Javascript,For Loop,我有一个联系我们的表单,我想在提交给php之前用javascript检查它。因此,当我调用函数verify()时,通过在整个代码中放置警报(“hello”),我确定它在第二个循环的第一次迭代后退出。有人知道为什么吗 这是我的html表单代码: <div id="errortext"> </div> <form id="contact" method="post" action="contact.php"> <h2>Contact Us<

我有一个联系我们的表单,我想在提交给php之前用javascript检查它。因此,当我调用函数verify()时,通过在整个代码中放置警报(“hello”),我确定它在第二个循环的第一次迭代后退出。有人知道为什么吗

这是我的html表单代码:

<div id="errortext">
</div>
<form id="contact" method="post" action="contact.php">
    <h2>Contact Us</h2>
    <h1>Fields marked with a * are required</h1>
    <p>Full Name*</p>
    <input type="text" class="single" placeholder="Full Name" name="name" id="name" /><br />
    <p>E-Mail Address*</p>
    <input type="text" class="single" placeholder="E-Mail Address" name="email" id="email" /><br />
    <p>Phone Number</p>
    <input type="text" class="single" placeholder="Phone Number" name="number" id="number" /><br />
    <p>Subject</p>
    <input type="text" class="single" placeholder="Subject" name="subject" id="subject" /><br />
    <p>Message*</p>
    <textarea placeholder="Message" name"message" id="message"></textarea><br />
    <input type="button" id="submitb" onclick="verify()" value="SEND" />
</form>

联系我们
标有*的字段是必填字段
全名*


电子邮件地址*


电话号码


主题


信息*


下面是我的javascript代码:

<script type="text/javascript">
    function verify()
    {
        var rgood = true, nrgood = true;
        var name = document.getElementById("name");
        var email = document.getElementById("email");
        var phone = document.getElementById("number");
        var subject = document.getElementById("subject");
        var message = document.getElementById("message");
        var error = document.getElementById("errortext");

        var relements = new Array(name, email,  message);
        var nrelements = new Array(phone, subject);

        var relementsng = new Array;
        var nrelementsng = new Array;
        var relementsngp = new Array;
        var nrelementsng = new Array;

        for (var x = 0; x < relements.length; x++)
        {
            if (relements[x].value == "")
            {
                rgood = false;
                relementsng.push(relements[x]);
                relementsngp.push(relements[x].placeholder);
            }
        }

        for (var y = 0; y < nrelements.length; y++)
        {
            if (nrelements[y].value == "")
            {
                nrgood = false;
                nrelementsng.push(nrelements[y]);
                nrelementsngp.push(nrelements[y].placeholder);
            }
        }
        alert("hello");
        if (!rgood)
        {
            error.textContent = "All required fields are not filled out! These fields must be filled out: " + nrelementsngp.toString() + "!";
        }
    }
</script>

函数验证()
{
var rgood=true,nrgood=true;
var name=document.getElementById(“名称”);
var email=document.getElementById(“电子邮件”);
var phone=document.getElementById(“编号”);
var subject=document.getElementById(“subject”);
var message=document.getElementById(“消息”);
var error=document.getElementById(“errortext”);
var relations=新数组(名称、电子邮件、消息);
var nElements=新阵列(电话、主题);
var relementsng=新数组;
var nrelementsng=新数组;
var relementsngp=新数组;
var nrelementsng=新数组;
对于(变量x=0;x
除了这个打字错误,您的代码没有问题:

line23: nrelementsngp.push(nrelements[x].placeholder);
                    ^
line31: nrelementsngp.push(nrelements[y].placeholder);
                    ^

在我的浏览器上,显示了下面的错误消息

"ReferenceError: Can't find variable: nrelementsngp"
希望这有帮助

    var relementsng = new Array;
    var nrelementsng = new Array;
    var relementsngp = new Array;
    var nrelementsng = new Array; // <<---- Change this line to
因为

for (var y = 0; y < nrelements.length; y++){
    if (nrelements[y].value == ""){
        nrgood = false;
        nrelementsng.push(nrelements[y]);
        nrelementsngp.push(nrelements[y].placeholder); // This place is causing your script to crash
    }
}
for(变量y=0;y

标识符
nrelementsngp
未声明。

不使用
alert
s,而是设置断点,单步执行代码并检查变量。这会很快告诉你问题出在哪里。这是提高调试技能的好机会。请阅读这些文章。我创建了一个小的独立测试来证明您的循环是有效的:很可能您的代码中存在错误,其中RNElement或Relation为null或未定义,因此它们不会添加到数组中。使用Web检查器或Firebug,在for循环中设置一个断点并检查数组的值。另外,我建议尽快将变量命名为一些不荒谬的东西:-)它们看起来都很相似,很难判断是否存在简单的错误somewhere@netpoetica他的变量实际上是有道理的
nElements
代表“非必需元素”
nrelementsg
代表“好的非必需元素”和
nrelementsng
代表“不好的非必需元素”,所以是的,如果OP能理解代码,那就没问题了。他可能应该对代码进行注释以提高可读性。啊,非常感谢!输入错误不在您指定的行上,而是在我的变量声明上。我声明了两次nrelementsng,而不是一个nrelementsngp。代码现在运行得很好,谢谢大家(我会给你们投票,但我还没有足够的“声誉”哈哈)别忘了投票结束这个问题。拼写错误有一个很接近的原因。是的,我在@naota提到一个拼写错误后就发现了。谢谢你!
for (var y = 0; y < nrelements.length; y++){
    if (nrelements[y].value == ""){
        nrgood = false;
        nrelementsng.push(nrelements[y]);
        nrelementsngp.push(nrelements[y].placeholder); // This place is causing your script to crash
    }
}