如何暂停执行javascript?

时间:2009-10-01 13:54:37

标签: javascript ruby-on-rails ajax

有没有办法暂停执行javascript直到整个页面加载到浏览器中?我正在使用AJAX更新文档底部的div但是当我在加载整个页面之前单击此链接时出现错误...

<%= link_to_remote 'Update', :update => 'div_at_the_bottom', :url => { :usual_stuff } %>

3 个答案:

答案 0 :(得分:3)

最简单的方法是在window.onload上执行所有操作:

window.onload = function() {
  // do everything here
}

你也可以在</body>之前将你的javascript放在页面的末尾。这样,无论你操作什么对象都保证在DOM中。

正如其他人所说,一些JS框架在DOM加载时有一个运行JS的好方法。这样做的主要优点是你不会得到JS相当于“无格式内容的闪存”,即看到一个(可能是丑陋的)形式的元素,然后在整页加载后更改。

答案 1 :(得分:2)

禁用生成的链接并在加载dom时启用它:

  1. 停用链接:

    <%= link_to_remote 'Update', 
            { :update => 'div_at_the_bottom', :url => { :usual_stuff } },
            { :disabled => 'disabled', :id => 'update-trigger' }
    %>
    

    (请注意,为了能够将此额外选项传递给link_to_remote,您需要通过使用curles "options"包装它来明确显示[2nd] {}哈希。{{3} })

  2. 然后在某个地方(包含原型js lib之后的任何地方)在DOM加载时启用链接(这类似于大家迄今为止所说的那样):

    <script>
    $(document).observe('dom:loaded', function() {
        $('update-trigger').disabled = false
    })
    </script>
    
  3. 这个解决方案在语义上也同意,如果这对你很重要(对我而言)。

答案 2 :(得分:1)

如果您使用jQuery之类的JavaScript库,则可以轻松地将任何javascript代码绑定到DOM ready事件,并避免此类问题。