用户按下jQuery事件在文本框中输入?

时间:2011-06-29 16:48:08

标签: javascript javascript-events jquery

Jquery中是否有任何事件仅在用户点击文本框中的输入按钮时触发?或者任何可以添加的插件都包含此内容?如果没有,我将如何编写一个可以执行此操作的快速插件?

9 个答案:

答案 0 :(得分:424)

您可以连接自己的自定义活动

$('textarea').bind("enterKey",function(e){
   //do stuff here
});
$('textarea').keyup(function(e){
    if(e.keyCode == 13)
    {
        $(this).trigger("enterKey");
    }
});

http://jsfiddle.net/x7HVQ/

答案 1 :(得分:85)

   $('#textbox').on('keypress', function (e) {
         if(e.which === 13){

            //Disable textbox to prevent multiple submit
            $(this).attr("disabled", "disabled");

            //Do Stuff, submit, etc..

            //Enable the textbox again if needed.
            $(this).removeAttr("disabled");
         }
   });

答案 2 :(得分:37)

这是一个适合你的插件:(小提琴:http://jsfiddle.net/maniator/CjrJ7/

$.fn.pressEnter = function(fn) {  

    return this.each(function() {  
        $(this).bind('enterPress', fn);
        $(this).keyup(function(e){
            if(e.keyCode == 13)
            {
              $(this).trigger("enterPress");
            }
        })
    });  
 }; 

//use it:
$('textarea').pressEnter(function(){alert('here')})

答案 3 :(得分:15)

这是一个jquery插件来做那个

(function($) {
    $.fn.onEnter = function(func) {
        this.bind('keypress', function(e) {
            if (e.keyCode == 13) func.apply(this, [e]);    
        });               
        return this; 
     };
})(jQuery);

使用它,包括代码并将其设置如下:

$( function () {
    console.log($("input"));
    $("input").onEnter( function() {
        $(this).val("Enter key pressed");                
    });
});

jsfiddle of it here http://jsfiddle.net/VrwgP/30/

答案 4 :(得分:7)

应该备注,因为版本live()已被删除,因此jQuery中1.7的使用已被弃用 在jQuery 1.9中。相反,建议使用on()

我强烈建议使用以下绑定方法,因为它解决了以下潜在的挑战:

  1. 通过将事件绑定到document.body并将$ selector作为第二个参数传递给on(),可以在DOM中附加,分离,添加或删除元素,而无需处理重新绑定或双重约束事件。这是因为事件直接附加到document.body而不是$selector,这意味着$selector可以添加,删除并再次添加,并且永远不会加载绑定到它的事件。
  2. 通过在off()之前调用on(),此脚本既可以存在于页面主体内,也可以存在于AJAX调用体内,而不必担心意外双重绑定事件
  3. 通过将脚本包装在$(function() {...})中,此脚本可以再次由页面主体加载,也可以在AJAX调用的主体内加载。对于AJAX请求,$(document).ready()不会被解雇,而$(function() {...})则会被解雇。
  4. 以下是一个例子:

    <!DOCTYPE html>
      <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script type="text/javascript">
          $(function() {
            var $selector = $('textarea');
    
            // Prevent double-binding
            // (only a potential issue if script is loaded through AJAX)
            $(document.body).off('keyup', $selector);
    
            // Bind to keyup events on the $selector.
            $(document.body).on('keyup', $selector, function(event) {
              if(event.keyCode == 13) { // 13 = Enter Key
                alert('enter key pressed.');
              }
            });
          });
        </script>
      </head>
      <body>
    
      </body>
    </html>
    

答案 5 :(得分:1)

另一个微妙的变化。 我去了一个轻微的权力分离,所以我有一个插件来启用捕获回车键,然后我只是通常绑定到事件:

(function($) { $.fn.catchEnter = function(sel) {  
    return this.each(function() { 
        $(this).on('keyup',sel,function(e){
            if(e.keyCode == 13)
              $(this).trigger("enterkey");
        })
    });  
};
})(jQuery);

然后使用:

$('.input[type="text"]').catchEnter().on('enterkey',function(ev) { });

此变体允许您使用事件委派(绑定到您尚未创建的元素)。

$('body').catchEnter('.onelineInput').on('enterkey',function(ev) { /*process input */ });

答案 6 :(得分:1)

HTML代码: -

<input type="text" name="txt1" id="txt1" onkeypress="return AddKeyPress(event);" />      

<input type="button" id="btnclick">

Java脚本代码

function AddKeyPress(e) { 
        // look for window.event in case event isn't passed in
        e = e || window.event;
        if (e.keyCode == 13) {
            document.getElementById('btnEmail').click();
            return false;
        }
        return true;
    }

您的表单没有默认提交按钮

答案 7 :(得分:1)

如果您输入的是search,则还可以使用on 'search'事件。例子

<input type="search" placeholder="Search" id="searchTextBox">

$("#searchPostTextBox").on('search', function () {
    alert("search value: "+$(this).val());
});

答案 8 :(得分:0)

在阅读jQuery文档之前,我无法进入keypress事件以按下Enter键,并挠了一下头,直到:

当浏览器注册键盘输入时,keypress事件发送到一个元素。此事件与keydown事件类似,但修改键和非打印键(例如Shift,Esc和delete触发keydown事件)除外不是按键事件。“(https://api.jquery.com/keypress/

我不得不使用keyupkeydown事件来赶上回车按钮的按下。