1

私が持っているもの:

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

欲しいもの:パフォーマンスの問題のために セレクター'*'をに変更します。all classes with a bound click_handler


私の考え:ハンドラーをクラスにバインドするときに追加のクラスを割り当てる。


アイデアの問題:変更しなければならないコードの量が多すぎます!そして私はとても怠け者です...

4

3 に答える 3

3

次のようなクリックハンドラを使用して、すべての要素を選択できます。

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

これを行った場合は、$。eachループを使用してこれらの要素をループし、関数/イベントをそれらに適用できます:)

于 2012-05-31T20:33:18.983 に答える
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;
};
于 2012-05-31T20:35:01.020 に答える
0

jQueryはイベントが要素に存在するかどうかをチェックします

これに対する答えはあなたを助けるかもしれません。この質問は、要素にイベントが存在するかどうかを確認することでした。

于 2012-05-31T20:34:51.200 に答える