使用jQuery连接事件的模式

时间:2009-05-06 21:46:09

标签: javascript jquery

请查看最后的代码,看看我用来连接jQuery代码中的事件的方法。我更喜欢使用bind,因为你也可以看到我不喜欢在我的事件处理程序中使用匿名函数。

由于以下两个原因,我正在使用命名函数:

  1. 可读性
  2. 多次调用我的WireUpGlobalCommandClickEvents不会为点击我的链接添加多个事件处理程序。
  3. 这有副作用 - 我需要使用bind的功能将数据传递给OnAddNewSnippetClick,因为在OnAddNewSnippetClick中,这现在引用导致事件触发的元素。

    我一直把JavaScript视为二等公民,你可以看到我试图强迫我在我的ASP.NET MVC应用程序中使用的约定也在我的JavaScript上。我对多个事件处理程序的偏执是否被添加了错位?是否有更好的模式使用jQuery连接事件处理程序?

    SettingsController.prototype = {
    
        OnAddNewSnippetClick: function(event) {
            event.data.SettingsController.SettingsAjaxHelper.AddNewSnippet(event.data.Parameter, event.data.SettingsController);
        },
    
        WireUpGlobalCommandClickEvents: function(parameter) {
            $('#addSnippetLink').bind("click", { SettingsController: this, Parameter: parameter }, this.OnAddNewSnippetClick);
        }
    };
    

1 个答案:

答案 0 :(得分:2)

如果您对绑定的多个事件真的很偏执,可以使用live,它会根据选择器自动连接事件。

 $(".stuff").live('click',function(){});

$("#element").one('click',function(){});

$("#element").unbind('click').bind('click',function(){});

但是,是的,看起来你正试图在javascript中做MVC,这可能是一种过度杀伤

http://docs.jquery.com/Events/live#typefn