【问题标题】:Input value disables Enter key输入值禁用 Enter 键
【发布时间】:2013-05-16 20:02:15
【问题描述】:

我遇到了有史以来最烦人的问题!我正在使用一个易于使用的密码脚本:

var count = 2;

function validate() {
    var un = document.myform.username.value;
    var pw = document.myform.pword.value;
    var valid = false;

    var unArray = ["Natalie"]; 
    var pwArray = ["0123456"]; 

    for (var i = 0; i < unArray.length; i++) {
        if ((un == unArray[i]) && (pw == pwArray[i])) {
            valid = true;
            break;
        }
    }

    if (valid) {
        window.location = "hello.html";
    } else {
        alert("ERRR! Wrong!");
        document.myform.username.value = "";
        document.myform.pword.value = "";
        document.myform.username.disabled = true;
        document.myform.pword.disabled = true;
        return false;
    }

}

现在,我为这个脚本做了一个表格:

<form method="POST" onsubmit="return validate()" name="myform">
    <input type="text" value="Natalie" name="username" style="width:0px;height:0px;border:0px solid;background:rgba(00,00,00,0);">
    <input type="text" name="pword" style="width:150px;border:1px solid #fff;font-family:roboto;font-size:12px;padding:1% 12%;text-align:center;letter-spacing:4px;font-weight:900;margin:2%;" value="Ex: 354627" onfocus="if (this.value == 'Ex: 354627')     {this.value=''}">
    <br>
    <input name="submit" type="submit" value="Check In" onclick= " validate()">
</form>

一切正常,除了输入密码和按回车键!

为什么会这样,我该如何解决?我花时间把它全部放在一个 JSFiddle 中!

http://jsfiddle.net/j9HFg/14/

【问题讨论】:

  • 什么是返回false;为了 ?您是否尝试将其更改为 true 或完全删除它?
  • 您实际上是在使用一个易于破解的密码脚本。这应该在服务器端完成!
  • 是的,我知道!但这不是问题!现在是否容易打破并不重要!我只是要让输入键工作!
  • 这就是为什么您不应该处理提交按钮的click 事件 - 而是为&lt;form&gt; 处理submit 事件
  • 如果我将其更改为提交事件,而不是脚本不起作用...它只会重定向到 mypage.com/?username=Natalie&pword=0123456&submit=Check+In

标签: javascript html forms input password-protection


【解决方案1】:

您的 onclick 事件需要在 validate() 之前有一个 return。您的提交按钮的输入类型需要为submit。这将启用回车键。

<input name="submit" type="submit" value="Check In" onclick= "return validate()">

我也可以在表单上设置一个 onsubmit 事件

<form method="POST" onsubmit="return validate()" name="myform">

返回是必需的,因为如果我们像 onclick="false" 那样替换返回值,点击事件仍然会传播。但是如果我们像 onclick="return false" 这样返回 false,那么事件就会停止。

另外非常重要,用户名和密码应该在 javascript 中。请在服务器端进行。

【讨论】:

  • 解释为什么需要退货会很有用。
  • 好的,现在回车键起作用了!!! =D 我已经添加了所有更改,但现在的问题是 url 没有加载。它只会重新加载页面!
  • 通过在文本输入中添加onchange="validate()" 使其工作!
【解决方案2】:

我认为它不起作用,因为您没有单击提交按钮。

我敢打赌,按回车键不会触发onclick 事件。

您必须为keyUpkeyPress 或类似的东西添加处理程序(我不是 JS 专家)。


编辑:

我刚刚意识到您使用的是input type='button' 而不是input type='submit'

应该是这样的:

<input name="submit" type="submit" value="Check In" onclick="validate()">

在这种类型的输入上,onclick 应该与 enter 键一起使用。

【讨论】:

  • 好的,所以我需要找到一个脚本然后提交而不是点击!
  • onclick 是用回车键触发的。看到这个fiddle
  • @ogc-nick 看起来只在input type='submit' 上触发,但他有input type='button'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2011-12-14
  • 2019-02-12
  • 2021-08-13
相关资源
最近更新 更多