-1

我正在尝试对页面上的所有链接执行一个功能,然后在满足条件时撤消该功能。

$('a').click(function(){
    //some function
  if ( /*some condition*/ ) {
    $(this).//undo above function
  }
});

注意:我没有尝试使用unbind(),我试图让功能撤消本身。如果这有点不清楚,我提前道歉 - 如果您不确定,请询问我。谢谢。

4

3 回答 3

0

你有没有尝试过:

$('a').click(function(){
    //some function
  if ( /*some condition*/ ) {
    $(this).click(function() { return false; });
  }
});

编辑:还有另一种相当普遍的方式,起初我并没有真正想到。由于您正在对所有<a>标签执行此操作,因此您可以使用delegateundelegate函数来注册事件。在更现代的 jquery 版本中,这是通过.onand.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/

于 2012-07-12T16:59:41.653 回答
0

是的,有办法。然而,它并不像调用一个undo能逆转你刚才所做的事情的魔法函数那么简单。您需要自己编写代码,并执行与刚刚执行的步骤相反的步骤。

所以,如果代替// some function,你实际上有:

$(this).addClass('blue'); // add the class 'blue' to the link

然后为了撤消你必须打电话

$(this).removeClass('blue');

将类blue添加到链接中。

显然,你对元素做的事情越复杂,对undo他们来说就越难。例如,如果您将元素移动到新位置,那么您需要在这样做之前存储其当前位置,这样您就知道在需要时将其移回何处。

在某些情况下,如果您只是在元素本身上操作类、属性、事件处理程序等,那么在进行任何更改之前克隆元素可能会更容易。这样,“撤消”该功能就像用您在更改之前获取的克隆替换当前元素一样简单。

于 2012-07-12T17:13:22.867 回答
0

对于像“addClass”这样的简单情况,您可以轻松找到相反的功能。对于更复杂的交互,建议编写一个 do-function 和一个 undo-function。要管理这一切,您可以使用撤消控制器。看看我的撤消管理器,它可能会给你一个如何处理这个的方向。或者您可以将其插入您的代码中。

https://github.com/ArthurClemens/Javascript-Undo-Manager

于 2012-07-12T21:42:02.627 回答