如何阅读往悬停的回拨功能在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?"
解决方案
叫一个事件 bind
方法(例如 hover
)不删除旧的事件的处理程序,只会增加新的活动,所以你所谓的'恢复'旧的事件的功能不会的工作,因为它不会删除的事件。
你可以添加自己的活动,并随后消除他们时不影响任何其他事件则使用的命名空间活动: 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
所以加入你的悬停的事件,脚本的功能需要,悬停,然后触发你的定义事件。
也许它会更容易只是隐藏的旧元,并创建一个克隆与事件处理程序?然后就换回来老元,当你完成..
不隶属于 StackOverflow