Jquery - .one不解绑
Jquery - .one does not unbind
我有以下情况:
我有一个动画图,在动画结束时我想将点击处理程序添加到 "dead" link,然后隐藏实际幻灯片并显示下一张。我用 .one 绑定它,因为我不想在加载后再次触发它。
所以它有效,它显示下一张幻灯片,但该事件并未取消绑定。
即使我手动解除绑定它也会触发事件。
有人可以给我线索吗?
谢谢
杰斯塔
$("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");
});
});
});
});
});
这是从元素中删除所有绑定的 JQuery 命令:
$("#book_container").unbind(); //to flush previously bound actions
所以,我想我找到了解决方案。动画是问题所在。因为我的代码结构有多个设备和图表,每个设备都触发功能代码,所以设备 1 触发,然后两个图表触发两次,然后设备 2 再次触发它们,依此类推。
使用 .promise().done() 结构,所有事件都只触发一次,动画有效,所有事件都只触发一次。现在我绑定 .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") });
});
我有以下情况: 我有一个动画图,在动画结束时我想将点击处理程序添加到 "dead" link,然后隐藏实际幻灯片并显示下一张。我用 .one 绑定它,因为我不想在加载后再次触发它。 所以它有效,它显示下一张幻灯片,但该事件并未取消绑定。 即使我手动解除绑定它也会触发事件。
有人可以给我线索吗? 谢谢 杰斯塔
$("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");
});
});
});
});
});
这是从元素中删除所有绑定的 JQuery 命令:
$("#book_container").unbind(); //to flush previously bound actions
所以,我想我找到了解决方案。动画是问题所在。因为我的代码结构有多个设备和图表,每个设备都触发功能代码,所以设备 1 触发,然后两个图表触发两次,然后设备 2 再次触发它们,依此类推。
使用 .promise().done() 结构,所有事件都只触发一次,动画有效,所有事件都只触发一次。现在我绑定 .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") });
});