【问题标题】:How to disable AJAX-y links before page Javascript ready to handle them?如何在页面 Javascript 准备好处理它们之前禁用 AJAX-y 链接?
【发布时间】:2009-02-11 01:57:20
【问题描述】:

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

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

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

有什么建议吗?

【问题讨论】:

    标签: javascript prototype shopping-cart


    【解决方案1】:

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

    试试

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 如果他禁用链接并且用户没有启用javascript,他的故障保护是否仍然有效?
      • 嗯,取决于你如何禁用它们。如果您有一个简短的 JavaScript sn-p,它不依赖于正在加载的任何其他内容,您甚至可以在页面完全准备好之前轻松运行它。
      • 就像页面的末尾一样,否则元素不会在那里。对吗?
      • 这并不总是与代码缓慢有关。用户的连接速度可能很慢,例如 3g 加密狗。人们将在下载所有内容之前与页面进行交互。
      【解决方案3】:

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

      <script type="text/javascript">
        document.write('<link rel="stylesheet" type="text/css" href="someCssThatHidesLinks.css" />');
      
        window.onLoad = function() {
          //show links
        }
      
      </script>
      

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

      【讨论】:

      • 在 CSS 中禁用?你会怎么做?
      • 我认为只有让它们完全消失,这不是一个好主意。
      • 不知道我在想什么
      【解决方案4】:

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

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

      如果你在 DOM 准备好时触发 JS 增强,或者只是将

      如果您真的非常想延迟在第一次被解析的元素和正在加载的文档之间的点击,您可以编写如下代码:

      <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 启用先前禁用的操作的潜在解决方案。

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

      【讨论】:

        猜你喜欢
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        相关资源
        最近更新 更多