2012-11-23 1 views
3

1.8 조금씩 JQuery와 표현/선택기을 다시 - 쓰기 원래 :지글 지글

$.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); 
    } 
}); 

사용 :

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

이 작동 :

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

답변

1

1) 당신은 코드에서 오타가 : 당신은이 문자열 점 .를 사용하여 객체 속성으로 selector 인수를 사용할 수 없습니다 $_.data 대신 $._data

2)의 그 객체가 해당 속성 이름을 갖고 있는지 확인하려면 괄호를 사용해야합니다. obj[selector]

그래서이 표현식에 대한 고정 코드는 l OOK처럼 다음 here

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

작업 JSFiddle 가능.

+0

좋아, 좋은 바이올린. 내 사용 예제에 문제가 있습니까? 그것은 나를 위해 작동하지 않습니다 – JonWells

+0

'.filter','.not' 및 간단한 선택기를 확인했습니다. 사용 예제가 정확합니다. 사용 예제 테스트를 통해 바이올린을 업데이트했습니다. http://jsfiddle.net/BrPZL/1/ - 모든 것이 작동합니다. – Inferpse

+0

흠, 흥미 롭군요. 나는 여전히 내 프로그램에서 expr 작업을 할 수 없습니다. 나는이 컨텍스트, "this works"예제가 동일한 클릭 이벤트 내에서 잘 작동하지만 expr doesnt가 ​​아닌지 궁금합니다. 좋은 대답은 어쨌든 – JonWells