我有以下情况:我有一个动画图,在动画的最后,我想给一个"死"链接添加一个点击处理程序,然后隐藏实际的幻灯片并显示下一个。我把它和一捆在一起,因为我不想在装货后再把它开火。所以它工作了,它显示了下一张幻灯片,但事件并没有解除绑定。即使我手动解除绑定,它也会触发事件。
有人能给我一个线索吗?thxjesta
$("li#slide3").off().on("click", $(this), function() {
$("#slide3 .device").animate({opacity:1}, 1000, function() {
$("#slide3 .device").animate({opacity:0}, 1000, function() {
console.log($("li#slide3 img.graph_adds").data("height"));
$("li#slide3 img.graph_adds").animate({height:$("li#slide3 img.graph_adds").data("height")}, 1500, function() {
$("#book_container").one("click", "a#book", function(ev) {
ev.stopImmediatePropagation();
ev.preventDefault();
if (!animBook) { initialiseAnimatedImages(); }
$("li.active_slide").fadeOut(500, function() {
$("li#slide4").addClass("active_slide").fadeIn(1000);
resetSlides();
}).removeClass("active_slide");
});
});
});
});
});
所以,我想我找到了解决方案。动画是个问题。因为我的代码结构有多个设备和图形,每个设备都在激发功能代码,所以设备1激发了,然后两个图形激发了两次,然后设备2再次激发,以此类推
对于.procise().done()结构,all只触发一次,动画就会工作,所有事件都只触发一个。现在,我绑定.on()-语句中的元素也应该有效,因为现在它们应该只绑定一次,然后。。。但是nevah更改正在运行的系统^^
$("li#slide3").on("click", $("div.slide3"), function(ev) {
$("#slide3 .device").animate({opacity:1}, 1000).promise().done(function() {
$("#slide3 .device").animate({opacity:0}, 1000).promise().done(function() {
console.log("slide3-height: "+$("li#slide3 img.graph_adds3").data("height"));
$("li#slide3 img.graph_adds3").animate({height:$("li#slide3 img.graph_adds3").data("height")}, 1500).promise().done(function() {
console.log("slide3 click");
if(!$("a#book").hasClass("slide_4") ) {
$("a#book").addClass("slide_3"); }
});
});
}).promise().done(function() { console.log("div.slide3 anim don") });
});
这里是JQuery命令,它从元素中删除所有绑定:
$("#book_container").unbind(); //to flush previously bound actions