Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干多事件处理程序问题:同一事件只调用一个方法_Javascript_Jquery_Events_Backbone.js - Fatal编程技术网

Javascript 主干多事件处理程序问题:同一事件只调用一个方法

Javascript 主干多事件处理程序问题:同一事件只调用一个方法,javascript,jquery,events,backbone.js,Javascript,Jquery,Events,Backbone.js,我有一个主干js应用程序,它有一个视图和许多子视图 我的代码如下所示: var BooksView = Backbone.View.extend({ events: { "submit #book_form": "createBook" }, render: function() { var bookSocialView = new BookSocialView({ el: $('#the_books_social_div')

我有一个主干js应用程序,它有一个视图和许多子视图

我的代码如下所示:

var BooksView = Backbone.View.extend({

   events: {
      "submit #book_form": "createBook"
   },

   render: function() {
      var bookSocialView = new BookSocialView({
          el: $('#the_books_social_div')
      });
      bookSocialView.render();
   },

   createBook: function(e){
      e.preventDefault();
      ...
   }

});
var BookSocialView = Backbone.View.extend({
   events: {
      "blur .socialInput": "getSocial",
      "submit #book_form": "getSocial"
   },
   render: function () {
    ...
   },
   getSocial: function (e) {
       ...
   }
});
我的bookSocialView看起来像:

var BooksView = Backbone.View.extend({

   events: {
      "submit #book_form": "createBook"
   },

   render: function() {
      var bookSocialView = new BookSocialView({
          el: $('#the_books_social_div')
      });
      bookSocialView.render();
   },

   createBook: function(e){
      e.preventDefault();
      ...
   }

});
var BookSocialView = Backbone.View.extend({
   events: {
      "blur .socialInput": "getSocial",
      "submit #book_form": "getSocial"
   },
   render: function () {
    ...
   },
   getSocial: function (e) {
       ...
   }
});

现在,我的blur.socialInput调用getSocial,但我的submit#book_表单没有。不过,控制台中没有任何错误。

因为您在
BooksView
中已经有了
submit
的事件处理程序,所以可能首先调用它。但是在处理程序内部调用
e.preventDefault()
,它阻止提交事件到达
BookSocialView.getSocial()


最好围绕图书表单提交逻辑重新思考您的策略。如果您想让多个处理程序工作,但又想防止表单sumbision,我建议使用。您的处理程序仍然可以执行
e.preventDefault()
,但还应该触发其他事件,如
myModel.trigger('refreshSocial')

,谢谢您的回答。您知道是否有一种方法可以自动调用模糊,因此当表单提交时,它会自动失去焦点?要失去焦点,它需要移动到某个位置。只需找到其他需要关注的内容,然后调用
$el.focus()
好的,谢谢。另一个问题:焦点结束时不会模糊触发器吗?为什么我可以在不触发表单元素模糊的情况下单击“提交”按钮?提交按钮通常位于表单内部。当焦点移到元素外部时,将调用模糊。当您单击submit时,表单中仍保留技术焦点。另一方面,我发现模糊事件在大多数情况下都是无用的,因为有更好的方法来实现相同的功能。是否有一个事件可以用来实现与模糊基本相同的功能,但当单击“提交”按钮时会失去焦点?