Javascript 未调用Form validate()函数

Javascript 未调用Form validate()函数,javascript,forms,validation,Javascript,Forms,Validation,我已经创建了一个表单,我希望我的JavaScript通过检查人名的长度是否为>20来验证我的表单。如果是,我正试图使弹出警报出现,但它不工作。它什么也不做 这是我的HTML: <form name = "enrol" onsubmit="validate()"> <h3>Please complete the form below. Mandatory fields marked with *</h3> <fieldset> <

我已经创建了一个表单,我希望我的JavaScript通过检查人名的长度是否为
>20
来验证我的表单。如果是,我正试图使弹出警报出现,但它不工作。它什么也不做

这是我的HTML:

<form name = "enrol" onsubmit="validate()">
  <h3>Please complete the form below. Mandatory fields marked with *</h3>
  <fieldset>
    <h4>Personal Details</h4>
    <p>
      <label for="fname">*First Name</label> <input type="text" name="fname" id="fname" placeholder="First Name" />
    </p>
    <p>
      <label for="lname">*Last Name</label> <input type="text" name="lname" id="lname" placeholder="Last Name" />
    </p>
  </fieldset>
</form> 

validate
函数置于
窗口之外。onload
事件处理程序

window.onload = function() {
    console.log("The window has finished loading");


    var SubmitButton = document.getElementById("SubmitButton");
    SubmitButton.addEventListener('click', function() {
    document.getElementById("SubmitButton").click();}, false);
    console.log("The submit button has been clicked");


    var fname = document.getElementById("fname");
    fname.addEventListener('keyup', function() {
    console.log((fname).value);}, false);

    var lname = document.getElementById("lname");
    lname.addEventListener('keyup', function() {
    console.log((lname).value);}, false);
}

function validate()
{

    var fname = document.enrol.fname.value;
    var lname=document.enrol.lname.value;

    if(fname.length>20)
    {
        alert("Value can't exceed 20");
    }
    if(lname.length>20)
    {
        alert("Value can't exceed 20");
    }
}

这是因为在全局范围内无法访问
validate()
函数。这是因为它位于分配给
window.onload
的匿名函数中,因此只能在该函数中调用


要修复它,只需在关闭
窗口后移动它即可。onload
功能。

检查浏览器控制台。代码中未定义注册,为什么要创建按钮一次又一次单击自己的循环。由于为“提交”按钮添加的单击处理程序触发了对刚刚单击的按钮的单击,所以按钮会一直单击自己,这是怎么回事。这是在
窗口中完成的。onload
函数,但这不是OP要求的。他们只问为什么他们的
validate()
函数没有被调用。虽然op确实没有要求这样做,但很明显,这是一个bug,或者至少是一次不好的尝试。Op推断他对js不太了解,因此应该很自然地找出js代码其余部分中存在的任何其他缺陷…这是更符合逻辑的事情。修复循环单击按钮也将不胜感激-干杯。有了这个,我得到了未捕获的SyntaxError:意外令牌函数
window.onload = function() {
    console.log("The window has finished loading");


    var SubmitButton = document.getElementById("SubmitButton");
    SubmitButton.addEventListener('click', function() {
    document.getElementById("SubmitButton").click();}, false);
    console.log("The submit button has been clicked");


    var fname = document.getElementById("fname");
    fname.addEventListener('keyup', function() {
    console.log((fname).value);}, false);

    var lname = document.getElementById("lname");
    lname.addEventListener('keyup', function() {
    console.log((lname).value);}, false);
}

function validate()
{

    var fname = document.enrol.fname.value;
    var lname=document.enrol.lname.value;

    if(fname.length>20)
    {
        alert("Value can't exceed 20");
    }
    if(lname.length>20)
    {
        alert("Value can't exceed 20");
    }
}