Javascript 单击或按enter键触发主干事件

Javascript 单击或按enter键触发主干事件,javascript,jquery,backbone.js,backbone-events,Javascript,Jquery,Backbone.js,Backbone Events,我是主干网新手,我正在寻找一种方法,当我按下回车键并单击时,我的按钮会被触发。当前showPrompt仅在单击时执行。什么是最干净、最干燥的方式让它在按Enter键时执行,最好只对该输入字段执行 (function () { var Friend = Backbone.Model.extend({ name: null }); var Friends = Backbone.Collection.extend({ initialize: function (mode

我是主干网新手,我正在寻找一种方法,当我按下回车键并单击时,我的按钮会被触发。当前
showPrompt
仅在单击时执行。什么是最干净、最干燥的方式让它在按Enter键时执行,最好只对该输入字段执行

(function () {

  var Friend = Backbone.Model.extend({
    name: null
  });

  var Friends = Backbone.Collection.extend({
    initialize: function (models, options) {
      this.bind("add", options.view.addFriendLi);
    }
  });

  var AppView = Backbone.View.extend({
    el: $("body"),
    initialize: function() {
      this.friends = new Friends(null, {view: this});
    },
    events: {
      "click #add-friend":  "showPrompt",
    },
    showPrompt: function () {
      var friend_name = $("#friend-name").val()
      var friend_model = new Friend({ name:friend_name });
      this.friends.add( friend_model );
    },
    addFriendLi: function (model) {
      $("#friends-list").append("<li>" + model.get('name') + "</li>");
    }
  });

  var appView = new AppView; 

}());
(函数(){
var Friend=Backbone.Model.extend({
名称:空
});
var Friends=Backbone.Collection.extend({
初始化:功能(模型、选项){
this.bind(“add”,options.view.addFriendLi);
}
});
var AppView=Backbone.View.extend({
el:$(“正文”),
初始化:函数(){
this.friends=新朋友(null,{view:this});
},
活动:{
“单击#添加好友”:“显示提示”,
},
showPrompt:函数(){
var friend_name=$(“#friend name”).val()
var friend\u model=新朋友({name:friend\u name});
this.friends.add(friends\u模型);
},
addFriendLi:功能(模型){
$(“#好友列表”).append(“
  • ”+model.get('name')+“
  • ”); } }); var-appView=新的appView; }());

    另外,在哪里可以阅读更多关于这种事件绑定的信息?主干事件在定义方式上是否与JS或jQuery事件不同?

    您可以在
    AppView
    中向
    事件添加一个以上的
    事件

    events: {
       "click #add-friend":  "showPrompt",
       "keyup #input-field-id" : "keyPressEventHandler"
    }
    
    keyPressEventHandler : function(event){
        if(event.keyCode == 13){
            this.$("#add-friend").click();
        }
    }
    
    其中,
    #输入字段id
    是要添加事件的字段

    然后在
    AppView
    中添加
    eventHandler

    events: {
       "click #add-friend":  "showPrompt",
       "keyup #input-field-id" : "keyPressEventHandler"
    }
    
    keyPressEventHandler : function(event){
        if(event.keyCode == 13){
            this.$("#add-friend").click();
        }
    }
    
    注意:这段代码没有经过测试,但您可以这样做


    看看如何理解
    Backbone
    视图中处理
    事件

    假设您正在使用
    jQuery
    进行
    DOM操作
    ,您可以创建自己的“微型”插件,在输入中触发Enter事件。将其放入
    plugins.js或任何安装脚本文件中:

    events: {
       "click #add-friend":  "showPrompt",
       "keyup #input-field-id" : "keyPressEventHandler"
    }
    
    keyPressEventHandler : function(event){
        if(event.keyCode == 13){
            this.$("#add-friend").click();
        }
    }
    
    $('input').keyup(function(e){
      if(e.keyCode == 13){
        $(this).trigger('enter');
      }
    });
    
    现在您已经创建了这个“输入”插件,您可以通过以下方式收听输入事件:

    events: {
      "click #add-friend": "showPrompt",
      "enter #friend-name": "showPrompt"
    }
    

    所以我需要有两个不同的函数?按Event处理程序并显示提示。。嗯,我想这没关系,虽然看起来不是很枯燥,但你可以考虑在
    keyup
    上再次调用
    showPrompt
    ,检查
    keyCode
    。而不是在
    上触发
    单击
    事件,只需调用
    this.showPrompt()
    就足够了。@Timofey这种方法面临什么问题?它根本没有触发我的事件,我花了一些时间试图让它工作。我一定错过了什么,我可以很快回去再试一次,如果您想让它在任何元素上工作(不仅仅是输入),您可以对jQuery代码段执行如下操作:$(document).keyup(函数(e){if(e.keyCode==13){$(':focus').trigger('enter');});