我正在尝试对页面上的所有链接执行一项功能,然后在满足条件时撤消该功能。
$('a').click(function(){
//some function
if ( /*some condition*/ ) {
$(this).//undo above function
}
});
注意:我没有尝试使用unbind()
,我试图让函数自行撤消。如果有点不清楚,我会事先道歉 - 请问我一些你不确定的事情。感谢。
答案 0 :(得分:0)
你试过了吗?
$('a').click(function(){
//some function
if ( /*some condition*/ ) {
$(this).click(function() { return false; });
}
});
编辑:还有另一种相当普遍的方法,起初并没有真正发生过。由于您对所有<a>
代码执行此操作,因此您可以使用delegate
和undelegate
函数注册该事件。在更现代的jquery版本中,这是使用.on
和.off
方法完成的:
$("body").on("click", "a", function() {
//some function
if ( /*some condition*/ ) {
$(this).off("click");
}
});
http://api.jquery.com/delegate/
http://api.jquery.com/undelegate/
http://api.jquery.com/on/
http://api.jquery.com/off/
答案 1 :(得分:0)
是的,有办法。然而,它并不像调用魔法undo
函数那样简单,它会扭转你刚刚做的事情。您需要自己编写代码,并执行与刚刚执行的步骤相反的操作。
所以,如果代替// some function
,你实际上有:
$(this).addClass('blue'); // add the class 'blue' to the link
然后为了撤消你必须打电话
$(this).removeClass('blue');
将类blue
添加到链接。
显然,你对元素做的事情越复杂,它们就越难以undo
。例如,如果您将元素移动到新位置,那么在执行此操作之前,您需要存储其当前位置,这样您就知道在需要时将其移回到哪里。
在某些情况下,如果您只是在元素本身上操作类,属性,事件处理程序等,则在进行任何更改之前克隆元素可能更容易。这样,“撤消”该功能就像用更改前的克隆替换当前元素一样简单。
答案 2 :(得分:0)
对于像“addClass”这样的简单案例,您可以轻松找到相反的功能。对于更复杂的交互,建议编写do-function和undo-function。要管理这一切,您可以使用撤消控制器。看看我的撤消管理器,它可能会给你一个如何处理这个问题的方向。或者你可以将它插入你的代码中。