事件处理程序优化

时间:2013-10-26 15:42:42

标签: javascript meteor

我只是想知道是否有办法重构这段代码:

Template.bookmarks.events({
    // save changes
    'keyup .set_tag' : function(e,t) {
      if(e.which === 13) {
        save_changes(e.target.id.substring(3));
      }
    },

    'keyup .set_name' : function(e,t) {
      if(e.which === 13) {
        save_changes(e.target.id.substring(4));
      }
    },
    'click .save_changes' : function(e,t) {
      save_changes(e.target.id);
    }
});

2 个答案:

答案 0 :(得分:2)

尝试换行表单标记并听取该表单的提交事件。确保event.preventDefault()

然后你可以避免所有的键码13。

答案 1 :(得分:1)

function action(key, offset) {
  return function(e, t) {
    if (e.which === key) {
      save_changes(e.target.id.substring(offset))
    }
  }
}

Template.bookmarks.events({
  // save changes
  'keyup .set_tag': action(13, 3),
  'keyup .set_name': action(13, 4),
  'click .save_changes': function(e, t) {
    save_changes(e.target.id);
  }
});

解决问题的一种方法。我不会尝试强制第三个事件处理程序进入action函数,因为它会使action函数更复杂。