代码之家  ›  专栏  ›  技术社区  ›  Ovesh

如何在jQuery中创建自定义onEnter事件?

  •  5
  • Ovesh  · 技术社区  · 14 年前

    我想在jQuery中创建一个捕获ENTER onkeypress事件的自定义事件,这样我就不必每次都这样编写代码:

    if(e.keyCode == 13) {
        // event code here
    }
    

    换句话说,我希望能够这样编写代码:

    $("selector").bind("enter", function(){
        // event code here
    });
    
    2 回复  |  直到 14 年前
        1
  •  10
  •   Tomalak    12 年前

    现代jQuery(1.7及以上)使用 .on() 要绑定事件处理程序:

    // delegate binding - replaces .live() and .delegate()
    $(document.body).on("keyup", ":input", function(e) {
      if(e.which == 13)
        $(this).trigger("enter");
    });
    
    // direct binding - analogous to .keyup()
    $(":input").on("keyup", function(e) {
      if(e.which == 13)
        $(this).trigger("enter");
    });
    

    旧版本的jQuery使用以下方法之一。你可以要一个 .live() .delegate() 所有元素的事件处理程序。然后使用它触发自定义事件,如下所示:

    $(document.body).delegate(":input", "keyup", function(e) {
      if(e.which == 13)
        $(this).trigger("enter");
    });
    

    不为任何人 :input 你可以做你所拥有的:

    $("selector").bind("enter", function(){
       //enter was pressed!
    });
    

    You can test it out here .

        2
  •  4
  •   Tomalak    14 年前
    $("selector").keyup(function (e) {
      if (e.keyCode == 13) {
        $(this).trigger("enter");
      }
    }).bind("enter", function () {
      // event code here
    });
    

    使用有名称空间的事件名称是一个好主意,这样可以减少意外与使用自定义事件的其他jQuery代码发生冲突的可能性。所以不是 "enter" 你可以用 "enter.mywebapp" 或者类似的东西。使用的自定义事件越多,就越有意义。