3

少し前に、イベントの重複バインディングの防止について質問しました[こちら] 1.8 の式を更新しようとしていますが、機能しません。

オリジナル:

$.expr[':'].hasEvent = function(obj, idx, meta, stack) {
    return ($._data((obj), 'events') != undefined && $_.data((obj), 'events')[meta[3]] != undefined);
};

私の失敗した試み:

jQuery.expr[':'].hasEvent = $.expr.createPseudo(function( selector, context ) {
    return function(elem) {
        return ($._data((elem), 'events') != undefined && $_.data((elem), 'events').selector != undefined);
    }
});

利用方法:

$(object).not(":hasEvent(myEvent)").on("myEvent", onMyEvent);

これは機能します:

if (!$._data((object), 'events') || !$._data((object), 'events').myEvent) {
    $(object).on("myEvent", onMyEvent);
}
4

1 に答える 1

1

1)コードにタイプミスがあります:$_.data代わりに$._data

selector2)ドットを使用して引数をオブジェクト プロパティとして使用することはできません.。これは文字列です。オブジェクトにそのようなプロパティ名があることを確認したい場合は、括弧を使用する必要があります。obj[selector]

したがって、この式の修正コードは次のようになります。

jQuery.expr[':'].hasEvent = $.expr.createPseudo(function( selector, context ) {
    return function(elem) {
        return ($._data(elem, 'events') != undefined && $._data(elem, 'events')[selector] != undefined);
    }
});

動作中の JSFiddleはこちらから入手できます。

于 2012-11-23T13:02:02.183 に答える