基本登录功能(Javascript)
我一直在尝试创建一个登录函数,作为学习Javascript的一种方式。不过,我似乎无法让它充分发挥作用。我可以得到每一个警报,除了“你已登录”显示 我已经对它进行了编辑,所以现在函数接收用户输入,但它只对“Harry”有效,而其他用户名不起作用基本登录功能(Javascript),javascript,html,Javascript,Html,我一直在尝试创建一个登录函数,作为学习Javascript的一种方式。不过,我似乎无法让它充分发挥作用。我可以得到每一个警报,除了“你已登录”显示 我已经对它进行了编辑,所以现在函数接收用户输入,但它只对“Harry”有效,而其他用户名不起作用 var-users=[“哈里”、“朱莉”、“杜威”,5869]; 函数登录(){ var userInput=document.getElementById(“userInput”).value; if(userInput.length==0){ 警
var-users=[“哈里”、“朱莉”、“杜威”,5869];
函数登录(){
var userInput=document.getElementById(“userInput”).value;
if(userInput.length==0){
警报('请输入用户名');
返回;
}否则{
检查用户输入(userInput);
}
};
函数checkUserInput(userInput){
对于(var i=0;i
Javascript示例
您需要将添加输入参数“userInput”更新为checkUserInput方法。当您通过checkUserInput(userInput)时;在JSFIDLE代码的第15行
function checkUserInput(userInput){
for(var i = 0; i < users.length; i++){
console.log(users[i]);
if (users[i] === userInput){
alert("You are logged in");
return;
}
else{
alert("Invalid username, please try again or if you are new register");
return;
}
}};
函数checkUserInput(userInput){
对于(var i=0;i
首先,您需要在checkUserInput
函数中获取userInput
。
您正在传递它checkUserInput(userInput)代码>但未接收
因此:
函数checkUserInput(userInput){…
此外,如果用户与数组中的第一个不匹配,请立即发出警报并返回。请使用indexOf,但注意它与IE不兼容。首先,切勿使用客户端JavaScript实现任何登录功能,因为它充满了安全问题。也就是说,您可以做一些事情来改进代码
HTML:
用于附加侦听器。将对getElementById
的调用移出函数,以避免重复查询DOM
在login
函数中,您可能会丢失if
语句中的else
部分。在checkUserInput
中,您可以使用新方法检查名称是否包含在数组中,尽管浏览器对此的支持不是很好(如果这是一个学习练习,则希望与此无关)
如您所见,我正在将用户在文本字段中输入的值传递给调用checkUserInput
。这是您发布的代码不起作用的主要原因
HTH.您需要在第二个函数中接收userInput,因为它只在第一个函数中已知:函数checkUserInput(userInput){
-你正确地传递了它。这很奇怪,因为它现在可以工作了。但是我昨晚在那里试过了,它不起作用。虽然我已经很晚了。谢谢你的帮助:D。它现在仍然不起作用。到目前为止只有“哈利”登录。因为您发出警报并立即返回julie is not===harryUser希望将此作为练习。另外,我将从checkUserInput(输入)返回false;因此结果可以用于登录功能。最后,indexOf至少在IE9+中有效,includes在IEYeah中根本不起作用。我不想偏离原始代码太远,正如你所说,这是一个练习。但如果你认为它会增加任何价值,请随意编辑我的答案。至于使用indexOf,公平点,但最好使用最新的语法和Transfile编写,不是吗?这两个世界都是最好的。我强烈反对,除非你添加polyfills或babel-我不允许忽略庞大的IE用户baseYeah babel,基本上。我不是建议你忽略IE。是的,这是可行的。虽然这并不能真正帮助我理解为什么我的代码无法运行。有什么方法可以让我忽略它吗我的代码要检查的不仅仅是“Harry”?因为在第一次循环迭代后返回语句。很抱歉,我在这里太笨了,但如何修复它?我尝试删除返回语句,但没有任何帮助。原始代码的工作方式如下:for(var I=0;I
for every user:check if(users[I]==userInput)
如果是:警报确定并返回如果否:警报NOK并返回要解决此问题,您应该从NOK条件中删除返回,否则它将在第一次检查时停止。这就是为什么只有Harry可以登录。这很有效。谢谢。我如何才能将此评论^?
function checkUserInput(userInput){
if(users.indexOf(userInput) > -1){
alert("You are logged in");
return;
}
else{
alert("Invalid username, please try again or if you are new register");
return;
}
};
<form>
<input type="text" id="userInput" />
<input type="submit" value="Submit" />
</form>
function login(e) {
e.preventDefault();
var input = userInput.value;
if (input === '') {
alert('Please enter Username');
return;
}
checkUserInput(input);
}
function checkUserInput(name) {
if (users.includes(name)){
alert("You are logged in");
} else {
alert("Invalid username, please try again or if you are new register");
}
}
var form = document.forms[0];
var userInput = document.getElementById("userInput");
var users = ["Harry", "Julie", "Dewey", "5869"];
form.addEventListener('submit', login);