所有点击处理程序的jQuery选择器

时间:2012-05-31 20:28:12

标签: javascript jquery

我有什么:

$('#main').find('*').on('click.stop', function() {return false;});

我想要的是什么: 由于性能问题,将选择器'*'更改为all classes with a bound click_handler


我的想法:在将处理程序绑定到类时分配其他类。


想法问题:我必须改变的代码量太高了!我非常懒惰......

3 个答案:

答案 0 :(得分:3)

您可以使用点击处理程序选择所有元素:

var e = $.data($(body).get(0), 'events').click;

如果你已经这样做了,你可以使用$ .each循环遍历这些元素并将你的函数/事件应用于它们:)

答案 1 :(得分:3)

您可以编写表达式来执行此操作。 jQuery本身不支持这个选择器。

jQuery.extend(jQuery.expr[':'], {     
  click: function(elem) { 
       return $(elem).hasEvent('click');    
  } 
});

然后,您可以使用: $("*:click").on('click.stop',...

hasEvent:

$.fn.hasEvent = function(event, fn) {
if (!event) { return this; }
var has = {
      event: false,
      namespace: false,
      handler: false
    },
    events = this.data("events"),
    namespace = event.split(".");
event = namespace.shift();
namespace = namespace.join(".");
if (events) {
  if (!namespace) { has.namespace = true; }
  if (!fn) { has.handler = true; }
  if (event in events) {
    $.each(events[event], function(i, v) {
      if (namespace) {
        if (namespace === v.namespace && event === v.type) {
          has.namespace = true;
          has.event = true;
          if (fn && fn === v.handler) { has.handler = true; }
        }
      }
      else {
        if (event === v.type) {
          has.event = true;
          if (fn && fn === v.handler) { has.handler = true; }
        }
      }
    });
  }
}
return has.event && has.namespace && has.handler;
};

答案 2 :(得分:0)

jQuery check if event exists on element

这个答案可能会对你有所帮助。这个问题是检查元素上是否存在事件。