【问题标题】:disable enter key on page, but NOT in textarea禁用页面上的输入键,但不在文本区域中
【发布时间】:2010-11-19 01:54:19
【问题描述】:

找到这个脚本:

函数 stopRKey(evt) { var evt = (evt) ? evt:((事件)?事件:空); var 节点 = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey;

唯一的问题,它还会停止在 textarea 中使用输入键。这很麻烦。

我玩过使用: onkeypress="return handleEnter(this, event)"

但是我们的表单非常复杂,我正在寻找一种更简洁的处理方式。

【问题讨论】:

    标签: javascript forms


    【解决方案1】:

    您需要在此处检查事件目标的nodeNametagName,如下所示:

    if (evt.keyCode == 13 && node.nodeName != "TEXTAREA") { return false; }
    

    我注意到你已经在使用 jQuery,你可以用这个替换上面的所有代码:

    $(document).keypress(function (e) {
      if(e.which == 13 && e.target.nodeName != "TEXTAREA") return false;
    });
    

    【讨论】:

    • 我们是按原样修改该代码,还是需要更改 nodeName ?
    • @422 - 这是为了替换 if ((evt.keyCode == 13) && (node.type=="text")) {return false;} 代码行...这样它会返回 false 是输入,而不是 <textarea> 你在。跨度>
    • 是的,他是对的。基本上我所说的除了使用.nodeName 而不是.type。该死的。
    • @422 - 欢迎,还有一个更简单的 jQuery 解决方案,因为您已经包含它,将其添加到答案中。
    • 试过了:
       
      但是不工作,我是不是搞错了什么?
    【解决方案2】:

    我认为你可以改变这一行

    if (evt.keyCode == 13 && node.type == "text") {
      return false;
    }
    

    if (evt.keyCode == 13 && node.type != "TEXTAREA") {
      return false;
    }
    

    【讨论】:

    • 不,对我们不起作用。仍然尝试提交表单。将继续使用它,因为这似乎是实现我们想要做的最干净的方式
    • 抱歉应该是.nodeName。 (但@Nick Craver 发现了这个错误,而不是我。)
    【解决方案3】:

    如果您使用 jquery(强烈推荐),那么这将自动添加允许使用回车键的功能:

    $("textarea").focus(function () { 
         $(this).keypress(handleEnter);
    }); 
    

    【讨论】:

    • 我们确实使用 jquery,我们只是在普通脚本标签中使用您的代码吗?
    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 2011-01-07
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2012-08-02
    相关资源
    最近更新 更多