JavaScript 对象字面量 : same event binding from multiple methods

标签 javascript javascript-objects event-binding

我正在尝试找出从对象文字中绑定(bind)事件处理程序的最佳方法。

想象以下对象:

MySystem.ValidationTop = {

    topClose : function() {

        "use strict";

        $(document).on('click', '#topCloseTrigger', function(event) {

            // some action goes here

        });

    },

    topExecute : function() {

        "use strict";

        $(document).on('click', '#topExecuteTrigger', function(event) {

            // some action goes here

        });

    },

    topWarningTemplate : function(thisWarning) {

        "use strict";

        // warning is wrapped and styled here

    },

    addTopWarning : function(thisWarning) {

        "use strict";

        if (typeof thisWarning !== 'undefined') {

            this.addTop($(this.topWarningTemplate(thisWarning)));
            this.topClose();

        }

    },

    topConfirmationTemplate : function(thisConfirmation) {

        "use strict";

        // confirmation is wrapped and styled here

    },

    addTopConfirmation : function(thisConfirmation) {

        "use strict";

        if (typeof thisConfirmation !== 'undefined') {

            this.addTop($(this.topConfirmationTemplate(thisConfirmation)));
            this.topClose();

        }

    }

};

这里的问题是,方法 addTopWarningaddTopConfirmation 可以从其他对象中多次调用,这也会有效地调用 topClosetopExecute 多次,并创建到相同对象的重复绑定(bind)。我知道我可以将其转换为实例对象,该对象在创建对象实例时初始化所有绑定(bind),但同样,对于同一对象的多个实例,绑定(bind)也会发生多次。

我更愿意将其保留为对象文字,因为这个特定对象比需要实例化的对象更像是一个帮助器。

我不知道如何处理它,所以如果有人可以提供建议 - 我们将非常感激。

最佳答案

使用 jQuery 的事件命名空间,您可以执行以下操作:

$(document)
      .off('click.myValidation')
      .on('click.myValidation', '#topCloseTrigger', function(event) {
        // some action goes here
      });

上面的.off()将确保只为该事件设置一个处理程序。

关于JavaScript 对象字面量 : same event binding from multiple methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898827/

相关文章:

python-2.7 - Tkinter 列表框、箭头键与鼠标单击的行为差异

javascript - 直接与委托(delegate) - jQuery .on()

javascript - SAPUI5 View 表被切断

javascript - 在哪里存储身份验证 token (前端)以及如何将其放入多个端点的 http header 中?

javascript - 如何使用 knockout.js 根据现有数组中选择元素的选定值设置输入字段的可见性

javascript - 检查URL是否通过iframe加载

javascript - 在 JavaScript 中更改对象的类型

javascript - 将 [op.and] 添加到 Sequelize 查询对象

Javascript forEach 对象数组递归

javascript - 在 Javascript/jQuery 中为动态添加的表格行绑定(bind)点击事件