2

我正在为我的网站实现一个购物车,使用伪 AJAX 灯箱式效果。(它实际上并没有在请求之间调用服务器——一切都只是原型魔法来更新显示的值。)

对于没有 Javascript 的用户来说,还有一个半优雅的后备行为:如果他们点击添加到购物车,他们会被带到一个(场外,不太理想的交互)购物车。

但是,启用了 Javascript 的用户在加载页面然后立即点击添加到购物车也会被从页面中删除。我想让 Javascript 将它们延迟一段时间,然后在准备好后执行显示购物车行为。或者,在 Javascript 准备好之前完全忽略点击可能也是可行的。

有什么建议么?

4

4 回答 4

3

我现在使用 jQuery b/c 执行此操作,我隐约记得 jQuery 负责处理的浏览器差异:

尝试

$(document).ready(function() { // 把你所有的 jQuery 优点都放在这里。});

于 2009-02-11T02:25:07.127 回答
1

你的代码真的那么慢,这是一个问题吗?我敢打赌,没有人会在加载页面后不久购买您的产品。在任何合理的情况下,用户都会在与页面交互之前等待页面加载,尤其是对于像购买这样的事情。

但是要回答您的原始问题,您可以禁用普通代码中的链接,然后使用document.observe("dom:loaded", function() { ... })调用重新启用它们。

于 2009-02-11T02:04:06.540 回答
0

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

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

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

</script>

这样,如果您的用户没有 javascript,那么他们的链接仍然处于活动状态,否则如果他们有,那么链接将被隐藏,直到您加载并激活它们。以前从未这样做过,但我认为如果您想保留故障安全页面的功能,这应该可以工作。

于 2009-02-11T02:09:41.220 回答
0

但是,启用了 Javascript 的用户在加载页面然后立即点击添加到购物车也会被从页面中删除。

你什么时候开始你的脚本?如果您正在使用文档加载,它将在初始化之前等待所有图像下载,这确实会给用户一个点击购买的机会。

如果您在 DOM 准备就绪时触发 JS 增强,只需将 <script> 放在页面底部,或者使用框架提供的 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>
...

这样它就会在那里旋转轮询(并且在 IE 上,内存泄漏),直到链接的真正点击处理程序到位。虽然它非常难看,而且很脆弱,如果你的脚本由于某种原因中断(而且它是 JavaScript,所以很可能在某些时候,在某些浏览器上,它会中断),你的按钮就会中断。此问题适用于依赖稍后运行的 JavaScript 启用先前禁用的操作的所有潜在解决方案。

对于企业来说,没有什么比购买按钮坏了更糟糕的了。

于 2009-02-11T02:24:31.310 回答