Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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:Can';t缓存onclick处理程序?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery:Can';t缓存onclick处理程序?

Javascript jQuery:Can';t缓存onclick处理程序?,javascript,jquery,Javascript,Jquery,我有一个循序渐进的向导式流程,在每一步之后,用户为该步骤输入的信息都会向下折叠成一个简短的摘要视图,旁边会出现一个“返回”链接,如果用户决定要更改某些内容,就可以跳回流程中的该步骤 问题是,我不想在向导设置动画时单击“返回”链接。为了实现这一点,我使用了一个我以前使用过很多次的技巧;当我希望禁用onclick处理程序时,将其缓存到不同的属性,然后当我希望它再次可单击时,将其还原。这是我第一次尝试用jQuery来实现这一点,但由于某些原因,它无法工作。我的禁用代码是: jQuery.eac

我有一个循序渐进的向导式流程,在每一步之后,用户为该步骤输入的信息都会向下折叠成一个简短的摘要视图,旁边会出现一个“返回”链接,如果用户决定要更改某些内容,就可以跳回流程中的该步骤

问题是,我不想在向导设置动画时单击“返回”链接。为了实现这一点,我使用了一个我以前使用过很多次的技巧;当我希望禁用
onclick
处理程序时,将其缓存到不同的属性,然后当我希望它再次可单击时,将其还原。这是我第一次尝试用jQuery来实现这一点,但由于某些原因,它无法工作。我的禁用代码是:

    jQuery.each($("a.goBackLink"), function() {
        this._oldOnclick = this.onclick;
        this.onclick = function() {alert("disabled!!!");};
        $(this).css("color", "lightGray ! important");
    });
    jQuery.each($("a.goBackLink"), function() {
        this.onclick = this._oldOnclick;
        $(this).css("color", "#0000CC ! important");
    });
…我的启用代码是:

    jQuery.each($("a.goBackLink"), function() {
        this._oldOnclick = this.onclick;
        this.onclick = function() {alert("disabled!!!");};
        $(this).css("color", "lightGray ! important");
    });
    jQuery.each($("a.goBackLink"), function() {
        this.onclick = this._oldOnclick;
        $(this).css("color", "#0000CC ! important");
    });
我不确定它为什么不起作用(这些是使用相应链接标记上的
onclick
属性定义的好的老式onclick处理程序)。禁用链接后,我在单击链接时始终会收到“disabled!!!”消息,即使我运行了应该重新启用链接的代码。有什么想法吗


这段代码的另一个小问题是,用于更改链接颜色的
css()
调用似乎也不起作用。

我不想麻烦切换您的单击处理程序。相反,请尝试在单击处理程序中添加条件检查,以查看某个目标元素当前是否正在设置动画

if ($('#someElement:animated').length == 0)
{
    // nothing is animating, go ahead and do stuff
}

你可能会让这更简洁,但它应该给你一个想法。。。还没有测试过它,所以请注意您的控制台的typeos:-)


我没有尝试过这个,只是简单的$(':animated')。如果有很多不同的元素正在进行动画制作,那么长度可以作为页面上所有元素的总括。这是一个不错的解决方案,尽管我有一些连续运行的动画。你知道如果用户恰好在一个动画结束而下一个动画即将开始的瞬间单击鼠标右键,这是否有效吗?我不知道这种情况,但我知道它足够快,可以防止非常快速的双击-即使我的动画从静止状态开始,第二次点击永远不会错过。你的启用/禁用功能对我很有效。当您调用启用代码时,似乎您做错了什么,这就是为什么您也没有得到颜色。您使用JSF吗?如果是这样的话,试着用jQuery替换$,除此之外,我在控制台上尝试了您的代码,它确实起了作用。也许还有其他部分在干扰?@Yiğit@SelimOber-你是对的,代码做了正确的事情,但它被错误地使用了。基本上,有些情况会导致
disable
代码在一行中被调用两次,从而使缓存的onclick处理程序无法使用占位符1。修补后,一切正常(除了CSS颜色,它似乎仍然被忽略)。@aroth它是关于!重要的。您应该删除它或在css中定义样式,并在类之间切换。@aroth:此处不需要重要标志,应优先使用内联样式。如果您使用
!重要信息
标记在CSS文件中,请确保删除
之间的空格
重要