Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery";撤销;通过在返回单击时调用另一个函数执行的操作_Javascript_Jquery_Function - Fatal编程技术网

Javascript JQuery";撤销;通过在返回单击时调用另一个函数执行的操作

Javascript JQuery";撤销;通过在返回单击时调用另一个函数执行的操作,javascript,jquery,function,Javascript,Jquery,Function,单击后退按钮时,有没有办法“撤消”jQuery执行的函数?例如,我要执行的函数名为doSomething: function doSomething(button) { ...clicking the button does something... } function undoDoSomething(button) { ....undoes the doSomething function... } 我有一个撤销功能,撤销上面的功能,撤销某些东西: function d

单击后退按钮时,有没有办法“撤消”jQuery执行的函数?例如,我要执行的函数名为doSomething:

function doSomething(button) {
     ...clicking the button does something...
}
function undoDoSomething(button) {
    ....undoes the doSomething function...
}
我有一个撤销功能,撤销上面的功能,撤销某些东西:

function doSomething(button) {
     ...clicking the button does something...
}
function undoDoSomething(button) {
    ....undoes the doSomething function...
}
如何调用该按钮的函数,然后如果在执行该函数后立即单击“后退”按钮,我可以调用UndoSomething函数来撤消该函数


我知道jQuery历史记录可以追溯到历史记录中保存的上一页,但是我如何使用它来调用函数呢

您可以在window.unload事件上调用撤销函数

window.onbeforeunload = function(e) {
    undoDoSomething();
};

您可以在卸载之前使用离开页面时执行的

var called = false;

function doSomething(button) {
     called = true;
}


$(window).on('beforeunload',function(e){
    if(called){
        //call your function here
        undoDoSomething()
    }

});

历史api使这一点变得简单:

html:

<button>Increase</button>click back button to decrease
<span id="counter">0</span>
在每个操作中,添加到历史记录中,然后每次单击“上一步”按钮都将撤消每个更改(当然,您必须开发撤消部分。在这种情况下,我只是存储了此时应更改的计数并对其进行了更改。)

请注意浏览器支持,此代码将在所有现代浏览器和IE10+中工作。oldIE需要在url中使用iframe或哈希来解决问题

这里有一个相同的例子,添加了一个reduce按钮,表明它实际上并没有改变任何东西:它甚至内在地支持forward按钮(redo)


更新:修复了丢失初始状态的问题:

使用popstate事件和history.pushstate。当进行更改时,将其推到历史记录上,然后当按下backbutton导致popstate时,您可以捕获该更改,查看url和相关数据,并执行操作。我只想执行UndoSomething(),前提是我刚才执行了doSomething。我相信不管我是否调用doSomething(),它都会调用该函数。我明白了。在我看来,您需要在
undoDoSometing()
中添加一些逻辑,以检查是否调用了
doSomething()
。我只想执行undoDoSomething(),前提是我刚才执行了doSomething。我相信无论我是否调用doSomething(),它都会调用该函数。您可以在doSomething函数中使用一个全局布尔变量设置为false并将其设置为true,然后检查beforunload函数如果布尔值为true,则调用undosomething函数抱歉,您的答案到目前为止很有用,但是在doSomething之后调用其他函数的情况下,在我调用过的所有其他函数中添加“called=false”并不一定有意义。我希望back按钮的功能与实际的back按钮类似,这意味着只有当doSomething是之前调用的操作时,它才会调用UndoSomething。没问题。我喜欢有机会使用这个api。由于它不支持IE8,我只能在不增加很多复杂性的情况下使用它,因为添加了IE8 polyfill。现在我有一个奇怪的错误,我很高兴能得到一些建议。当您按下一个状态时,当您在单击“后退”按钮时弹出上一个状态时,该状态不会立即可用。例如,在您的示例代码中,当您增加时按“2”。但当点击后退按钮时,“1”状态弹出。不幸的是,我需要的是我刚刚按下“2”的状态,但我还没有想出如何得到它。非常感谢您的建议!我很困惑。按“增加”键时,将使用pushstate,存储值
1
。当您按back时,popstate会返回到原始值,您应该将其设置回默认值(我在演示中没有这样做,所以是的,那里有一个bug。)这就是您所指的吗?