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