【问题标题】:Custom namespaced events will not work自定义命名空间事件将不起作用
【发布时间】:2023-03-19 22:03:01
【问题描述】:

我正在尝试使自定义命名空间事件按此处所述工作:http://docs.jquery.com/Namespaced_Events

但我必须遗漏一些东西,因为除非命名空间完全匹配,否则我无法触发事件。

我创建了一个小提琴来演示这个问题:http://jsfiddle.net/PsR6x/1/

我做错了什么?

更新

第二个绑定在 jQuery v1.3.2v1.5.2 中调用,但在 v1.6.4 及以上版本中不调用。 在任何版本中都不会调用第三个绑定。

on 代替 bind 也不起作用。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    事件命名空间不是层次结构。
    使用您拥有的代码,$('#someid').trigger('griffin.model'); 触发所有,$('#someid').trigger('griffin.updated'); 触发所有。

    $('body').bind('griffin.model.updated.user', function() {
        alert('Exact namespace = trigger');
    });
    $('body').bind('griffin.model.updated', function() {
        alert('Will not trigger :(');
    });
    $('#someid').bind('griffin.model.updated', function() {
        alert('Same item, but not the same namespace = wont trigger');
    });
    

    在这里,您基本上为第一个创建了三个独立的命名空间,并为第二个和第三个创建了两个独立的命名空间。

    仔细看this example,阅读我留给你的cmets。尝试许多不同的事情,看看你能做的不同事情有时很有用。

    关于on() 不起作用:
    这个sn-p直接取自jquery-1.7.1.js:

    bind: function( types, data, fn ) {
        return this.on( types, null, data, fn );
    }
    

    如您所见,bind() 只是on() 的包装器,应该完全一样,除了bind() 不支持选择器或委托。

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2012-08-07
      相关资源
      最近更新 更多