【问题标题】:jQuery event handler organisationjQuery 事件处理程序组织
【发布时间】:2013-10-24 07:12:27
【问题描述】:

我正在寻找有关组织代码的最佳方式的建议。我有很多 jQuery 事件句柄用于:

  • 下拉菜单、标签等
  • 表单验证
  • $.ajax 获取动态表单<options>的请求
  • $.ajax 发布表单提交请求。

像backbonejs 这样的MVC 框架似乎有点过头了,但我当前的代码不可维护,并且会继续变得更糟,除非我给它某种结构。

$('#detailsform').find('.field').on('click','.save',function(){
    var input = $(this).siblings().find('input');
    input.attr('type','hidden');
    $(this).siblings().find('p').text(input.val());
    $(this).text('Change').addClass('change').removeClass('save');
    url = null; //query str

    $.ajax({
      type: "POST",
      url: url,
      data: data,
      success: success,
      dataType: dataType
    });
});
//next event listener 
//next event listener 
//next event listener 
//next event listener 

这是众多事件监听器之一。关于如何组织这个有什么建议吗?

【问题讨论】:

  • 您可以查看代码的正确缩进。您需要考虑所有这些事件处理程序之间的共同点

标签: javascript jquery ajax dom-manipulation


【解决方案1】:

我会使用以下结构。只需在 eventHandlers 数组中为您需要的每个元素添加更多对象。这甚至可以通过编程方式完成。

(function() {
    var Site = {
        init: function() {
            this.bindEventHandlers();
        },
        bindEventHandlers: function() {
            for (var i=0; i<this.eventHandlers.length; i++) {
                this.bindEvent(this.eventHandlers[i]);
            }
        },
        bindEvent: function(e) {
            e.$el.on(e.event, e.handler);
            console.log('Bound ' + e.event + ' handler for', e.$el);
        },
        eventHandlers: [
            {
                $el: $('#element1'),
                event: "click",
                handler: function() { console.log('Clicked',$(this)) }
            },
            {
                $el: $('#element2'),
                event: "click",
                handler: function() { console.log('Clicked',$(this)) }
            }
        ]
    };

    Site.init();
})();

在这里提琴:http://jsfiddle.net/chrispickford/LQr2B/

【讨论】:

  • 太好了,这看起来很有希望。谢谢你。并特别感谢 jsfiddle。我的帖子请求需要一定数量的验证。我一直在研究backbonejs,模型似乎可以处理这样的事情,我是否应该有一个单独的“模型”,从处理程序方法中调用来执行ajax请求和验证?
  • 我对 BackboneJS 不太熟悉,所以我无法评论它能做什么或不能做什么。如果我坚持上述范例,我将扩展 Site 对象以包含数据验证方法,并在运行时使用 eventHandlers 应用它们。你的目标应该是创建Unobtrusive JavaScript
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2017-10-10
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多