如何在页面Javascript准备好处理AJAX-y链接之前禁用它们?

如何在页面Javascript准备好处理AJAX-y链接之前禁用它们?,javascript,prototype,shopping-cart,Javascript,Prototype,Shopping Cart,我正在为我的网站实现一个购物车,使用一个伪AJAX Lightbox风格的效果。(实际上,它并没有在请求之间调用服务器——所有操作都只是更新显示的值。) 对于没有Javascript的用户,还有一种半优雅的回退行为:如果他们单击addtocart,他们会被带到一个(非现场的、不太理想的交互)购物车 然而,一个启用了Javascript的用户加载页面,然后立即点击add to cart,也会被从页面中删除。我希望Javascript将它们延迟一段时间,然后在准备好后执行showcart行为。在另一

我正在为我的网站实现一个购物车,使用一个伪AJAX Lightbox风格的效果。(实际上,它并没有在请求之间调用服务器——所有操作都只是更新显示的值。)

对于没有Javascript的用户,还有一种半优雅的回退行为:如果他们单击addtocart,他们会被带到一个(非现场的、不太理想的交互)购物车

然而,一个启用了Javascript的用户加载页面,然后立即点击add to cart,也会被从页面中删除。我希望Javascript将它们延迟一段时间,然后在准备好后执行showcart行为。在另一种情况下,在Javascript准备就绪之前完全忽略点击也可能是可行的


有什么建议吗?

您的代码真的有那么慢以至于这是一个问题吗?我敢打赌,没有人会在加载页面后很快购买你的产品。在任何合理的情况下,用户都会在与页面交互之前等待页面加载,特别是对于购买之类的东西


但是要回答您最初的问题,您可以在普通代码中禁用链接,然后使用
文档重新启用它们。观察(“dom:loaded”,function(){…})
调用。

您可以尝试,在css中隐藏链接,然后在页面加载时显示它们

<script type="text/javascript">
  document.write('<link rel="stylesheet" type="text/css" href="someCssThatHidesLinks.css" />');

  window.onLoad = function() {
    //show links
  }

</script>

文件。写(“”);
window.onLoad=函数(){
//显示链接
}
这样,如果您的用户没有javascript,那么他们的链接仍然是活动的,否则如果他们有,那么链接将隐藏,直到您加载并激活它们。以前从未这样做过,但我认为如果您想保留故障保护页面的功能,这应该是可行的

然而,一个启用了Javascript的用户加载页面,然后立即点击add to cart,也会被从页面中删除

您什么时候启动脚本?如果您使用的是DocumentonLoad,它将在初始化之前等待所有图像的下载,这确实会给用户一个点击购买的机会

如果您在DOM就绪时触发JS增强,或者只是将您的应用程序放在页面底部,或者使用框架提供的DOMContentLoaded样式事件,那么链接的调整速度应该足够快,用户不太可能先单击按钮

如果您真的非常想延迟在第一次解析的元素和加载的文档之间进行的单击,您可以编写如下内容:

<script>
    function methodcall(obj, name) {
        return function() {
            obj[name].call(obj);
        };
    }
</script>
...
<a href="nonjsversion" onclick="setTimeout(methodcall(this, 'click'), 500); return false;">Buy</a>
...

函数方法调用(obj,名称){
返回函数(){
obj[名称]。调用(obj);
};
}
...
...
所以它只是在那里旋转轮询(在IE上,是内存泄漏),直到链接的真正点击处理程序就位。但它非常难看,而且很脆弱,如果你的脚本因为某种原因(它是JavaScript,所以很有可能在某个浏览器上的某个点上)崩溃,那么你的按钮就会崩溃。这个问题适用于所有可能的解决方案,这些解决方案依赖于稍后运行的JavaScript来启用以前禁用的操作


没有什么比一个坏掉的购买按钮更糟糕的了。

我现在用jQuery b/c做这件事,我隐约记得jQuery处理的浏览器差异:

试一试

$(文档).ready(函数(){ //把你所有的jQuery优点都放在这里。
});

在CSS中禁用?你会怎么做?只有让它们完全消失,我认为这不是一个好主意。我不知道我在想什么,如果他禁用链接,用户没有启用javascript,他的故障保护还会工作吗?好吧,取决于你如何禁用它们。如果您有一个不依赖于其他加载内容的短JavaScript代码段,那么即使在页面完全就绪之前,您也可以轻松地运行该代码段。就像在页面末尾一样,因为否则元素还不存在。对吧?代码并不总是很慢。用户可以有一个缓慢的连接,如3g加密狗。在下载所有内容之前,用户将与页面进行交互。