【问题标题】:jQuery onFocus textarea, then on keyup submitjQuery onFocus textarea,然后在 keyup 上提交
【发布时间】:2011-11-01 14:03:57
【问题描述】:

您好,我正在尝试制作一个 jquery ajax 提交表单,而我目前正在尝试对提交表单进行限制。 我希望用户按 Enter 提交表单,而不是按提交按钮, 但只有当用户专注于文本区域/输入字段时,才会在他/她按 Enter 键时提交!

我尝试编写自己的代码并在其中进行编辑以查看有效的方法, 我已经弄清楚了这段代码,但它不能很好地工作:(

$('.addformtextarea').focus(function() {

$(document).keyup(function(e){
    switch (e.keyCode) {
        case 13: //enter
        //code to be 
        break;
    }
});

.addformtextarea 是要关注的文本区域。

并且确实返回 false;行为与 break 相同; ?因为我有一个返回错误;休息前;

谢谢:D

【问题讨论】:

    标签: jquery


    【解决方案1】:

    绑定到输入的keyup 事件可能会更好:

    $(".addformtextarea").keyup(function(e) {
        switch (e.which) {
            case 13: //enter
            //code to be 
            break;
        }
    });
    

    请注意,我使用了which 而不是keyCode。那只是因为 jQuery 对事件对象进行了规范化以消除任何跨浏览器的不一致。

    您当前代码的问题在于,一旦触发了focus 事件,keyup 事件就会绑定到document 并且会触发元素是否具有焦点。

    【讨论】:

      【解决方案2】:

      试试这个:

      $('textarea').keydown(function(e) {
          if (e.which == 13) {
              alert('You pressed enter');
              // $('your_form').submit();
          }
      });
      

      如果用户在 textarea 中输入,那么它不会被聚焦吗?我真的不喜欢冗余。

      演示:http://jsfiddle.net/cjTu9/4/

      【讨论】:

        【解决方案3】:

        试试这个:

        $('.addformtextarea').keyup(function(e){
            switch (e.keyCode) {
                case 13: //enter
                //code to be 
                return false;
            }
        });
        

        您不必担心焦点,因为只有当输入具有焦点时,keyup 才会触发。

        break只跳出switch,如果是用代码做的话,需要return false来防止自动提交。

        【讨论】:

        • 非常感谢!并感谢您回答我的第二个问题 return false 不会与 switch/case 混淆?这是个好消息 :) 现在可以使用了 :D
        • 考虑使用 event.which 而不是 event.keyCode
        猜你喜欢
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-02
        • 2015-09-12
        • 1970-01-01
        相关资源
        最近更新 更多