Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表单验证对表单没有任何作用,没有HTML,只有JS_Javascript_Html_Forms - Fatal编程技术网

Javascript 表单验证对表单没有任何作用,没有HTML,只有JS

Javascript 表单验证对表单没有任何作用,没有HTML,只有JS,javascript,html,forms,Javascript,Html,Forms,我正在尝试学习JS,所以我只在JS中编写代码(在我的html代码中,最多只有body标记使用该脚本) 我尝试在上面提到的条件下编写一个登录表单,并使用验证函数对其进行验证。 由于某种原因,当我提交表单时,什么也没有发生(我相信它甚至没有调用validate函数,因为我在表单的开头放了一个警报) 我的代码: function validateLogin() { alert("CHECK"); var username = document.getElementById('usern

我正在尝试学习JS,所以我只在JS中编写代码(在我的html代码中,最多只有body标记使用该脚本)

我尝试在上面提到的条件下编写一个登录表单,并使用验证函数对其进行验证。 由于某种原因,当我提交表单时,什么也没有发生(我相信它甚至没有调用validate函数,因为我在表单的开头放了一个警报)

我的代码:

function validateLogin() {
    alert("CHECK");
    var username = document.getElementById('username').value;
    var pass = document.getElementById('pass').value;
    if (username === "admin" && pass === "admin") {
        return true;
    } else {
        alert("Wrong username or password!");
        return false;
    }
}

var loginDiv = document.createElement('div');
loginDiv.className = 'loginDiv';
var loginForm = document.createElement('form');
loginForm.className = 'loginForm';
loginForm.onsubmit = "return validateLogin()";
var username = document.createElement('input');
username.id = 'username';
var pass = document.createElement('input');
pass.id = 'pass';
pass.type = 'password';
var subm = document.createElement('input');
subm.type = 'submit';
loginForm.appendChild(document.createTextNode("Username:"));
loginForm.appendChild(username);
loginForm.appendChild(document.createElement('br'));
loginForm.appendChild(document.createTextNode("Password:"));
loginForm.appendChild(pass);
loginForm.appendChild(document.createElement('br'));
loginForm.appendChild(subm);
loginForm.action = "#";
loginForm.method = "post";

loginDiv.appendChild(loginForm);
document.body.appendChild(loginDiv);
编辑我发现 loginForm.onsubmit=“return validateLogin()”; 进入


出于某种原因,为我解决了这个问题。

首先,您的目标是DOM对象,而不是值。 而不是:

var username = document.getElementById('username');
使用:

当然,这不是构建身份验证系统的好方法,但因为这是为了学习,我们将继续。我也不建议使用所有这些“appendChild”函数来创建HTML。 有更好的方法。看看像MuschacheJS这样的东西以及它们是如何进行渲染的

编辑:

您还需要调用函数validateLogin(); 你可以这样做:

document.getElementById("submitButton").addEventListener("click", function(e) {
  validateLogin();
});

此代码假定有一个id为submitButton的按钮,但您已经知道如何创建它

将按钮代码更改为以下内容:

 var subm = document.createElement('button');
 subm.innerHTML = 'click me';
 subm.onclick = validateLogin();
 subm.type = 'submit';

您的
onsubmit
属性未添加到表单中。要解决此问题,请使用
.setAttribute
,如下面代码所示

第二个问题是,您没有得到输入字段的值,而是得到完整的节点。为此,您需要附加
.value

如果您不希望在使用真实登录凭据时,页面重新加载(或重定向到表单的
操作
属性中给定的任何页面,请将
事件.preventDefault()
预先发送到
验证登录()


谢谢,但不管你向我展示了什么优点,我甚至没有看到函数开头的警报。这是由于语法错误还是函数中没有出现警报?我已经更新了代码来回答你的问题。另外,请访问JSlint.com,在那里你可以在线检查你的代码。如果你对它比较满意,请在y中使用它我们自己的编辑器,因此您不必复制/粘贴代码。感谢您的帮助!谢谢,它不应该是subm.onclick=return validateLogin();?此时,使用您提供的代码,它会在validateLogin()的开头自动启动警报功能,甚至不让我看到表单伟大的答案谢谢。在这一点上,我提交表单时没有发生任何事情,甚至没有警告(“检查”); statement@Sharonica我已经测试了我在一个空白文件中发布的代码,该文件只包含一个
标记,并将
包装在上面的JavaScript代码周围,对我来说效果很好。好的,我会继续挖掘,可能是其他原因阻止了我的代码正常工作。非常感谢much@Sharonica你喜欢哪个浏览器用于测试此功能?我尝试了Chrome和IE,在编辑代码(我编辑了问题)后,它可以工作
document.getElementById("submitButton").addEventListener("click", function(e) {
  validateLogin();
});
 var subm = document.createElement('button');
 subm.innerHTML = 'click me';
 subm.onclick = validateLogin();
 subm.type = 'submit';
function validateLogin() {    
    alert("CHECK");
    var username = document.getElementById('username').value;
    var pass = document.getElementById('pass').value;
    if(username === "admin" && pass ==="admin"){
        return true;
    } else{
        alert("Wrong username or password!");
        return false;
    }
}
var loginDiv = document.createElement('div');
loginDiv.className = 'loginDiv';
    var loginForm = document.createElement('form');
        loginForm.className = 'loginForm';
        // .setAttribute() allows to set all kind of attributes to a node
        loginForm.setAttribute("onsubmit", "return validateLogin()");
        var username = document.createElement('input');
                username.id = 'username';
            var pass = document.createElement('input');
                pass.id = 'pass';
                pass.type = 'password';
            var subm = document.createElement('input');
            subm.type = 'submit';
        loginForm.appendChild(document.createTextNode("Username:"));
        loginForm.appendChild(username);
        loginForm.appendChild(document.createElement('br'));
        loginForm.appendChild(document.createTextNode("Password:"));
        loginForm.appendChild(pass);
        loginForm.appendChild(document.createElement('br'));
        loginForm.appendChild(subm);
        loginForm.action = "#";
        loginForm.method = "post";

    loginDiv.appendChild(loginForm);
document.body.appendChild(loginDiv);