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

2)你不能selector使用点作为对象属性使用参数.这是字符串,如果你想检查对象是否有这样的属性名称,你应该使用括号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 回答