을 읽는 방법밖에 없버 콜백 함수에서 jQuery
-
09-06-2019 - |
문제
내가 사용하는 jQuery 를 설정 가져 콜백을 위해 요소에 내 페이지입니다.나는 지금 쓰는 모듈을 필요로 일시적으로 새로운 가리키는 행동에 대한 어떤 요소입니다.새로운 모듈을 액세스 할 수 없습니다 원래 코드를 가리키는 기능.
고 싶 저장 오래된 기능을 가리키기 전에 새로운 사람은 그래서 나는 그들을 복원할 수 있습으로 완료되면 임시버니다.
이런 생각 저장될 수 있습 사용 jQuery.data()
기능:
//save old hover behavior (somehow)
$('#foo').data('oldhoverin',???)
$('#foo').data('oldhoverout',???);
//set new hover behavior
$('#foo').hover(newhoverin,newhoverout);
할 물건으로 새로운 가져 행동...
//restore old hover behaviour
$('#foo').hover($('#foo').data('oldhoverin'),$('#foo').data('oldhoverout'));
그러나 내가 어떻게 현재 등록된 가리키는 함수에서 jQuery?
Shadow2531,나이 작업을 수행하기 위해 노력하고 수정하지 않고 코드는 원래 등록 콜백이 있습니다.당신의 제안은 것이 잘 작동하지 않습니다.감사에 대한 제안을 수 있도록 명확히 무엇이겠습니다.어쩌면 내가로 가서 원본의 jquery 는 방법을 알아낼 이러한 콜백은 저장된 내부적으로 합니다.어쩌면 내가 변경 질문하는"그것은 이렇게 수정하지 않고 jquery?"
해결책
호출 이벤트 bind
방법(예: hover
)삭제하지 않는 옛 이벤트 처리,추가의 새로운 이벤트,그래서 당신의 아이디어의'복원하는'오래된 이벤트 기능이 작동하지 않을 것,그것이 없을 삭제하 이벤트로 구성되어 있습니다.
추가할 수 있습니다 자신의 이벤트,그리고 그 제거에 영향을 미치지 않고 다른 이벤트를 다음 사용하 이벤트 namespacing: http://docs.jquery.com/Events_(가)#Namespacing_events
다른 팁
가 확실하지 않으면 이동,하지만 당신이 시도 할 수 있습니다:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Jquery - Get, change and restore hover handlers</title>
<script src="jquery.js"></script>
<script>
function setHover(obj, mouseenter, mouseleave) {
obj.data("_mouseenter", mouseenter);
obj.data("_mouseleave", mouseleave);
obj.hover(obj.data("_mouseenter"), obj.data("_mouseleave"));
}
function removeHover(obj) {
obj.unbind("mouseenter", obj.data("_mouseenter"));
obj.unbind("mouseleave", obj.data("_mouseleave"));
obj.data("_mouseenter", undefined);
obj.data("_mouseleave", undefined);
}
$(document).ready(function() {
var test = $("#test");
setHover(test, function(e) {
alert("original " + e.type);
}, function(e) {
alert("original " + e.type);
});
var saved_mouseenter = test.data("_mouseenter");
var saved_mouseleave = test.data("_mouseleave");
removeHover(test);
setHover(test, function() {
alert("zip");
}, function() {
alert('zam');
});
removeHover(test);
setHover(test, saved_mouseenter, saved_mouseleave);
});
</script>
</head>
<body>
<p><a id="test" href="">test</a></p>
</body>
</html>
그렇지 않다면,아마도 그것은 당신이 몇 가지 아이디어.
나는 확실하지 않으면 이것은 당신이 무엇을 의미하지만,바인딩할 수 있습니다 사용자 정의 이벤트는 다음을 트리거합니다.
http://docs.jquery.com/Events/bind
그래서 추가로 가리키기 이벤트,스크립트 기능을 위해 필요한 것을 가져가는,다음의 사용자 정의 이벤트입니다.
어쩌면 그것을 쉽게 될 것을 그냥 숨기기 오래된 요소들과 함께 복제 당신의 이벤트 처리기는가?그냥 스왑시에 요소가 완료되면..