【问题标题】:JavaScript method does not execute fully when called from (document).ready从 (document).ready 调用 JavaScript 方法时未完全执行
【发布时间】:2012-04-12 11:47:27
【问题描述】:

我有一个页面显示(来自 asp.net 代码的 html 输出)房屋/属性。 我构建了以下 javascript,只需按一下按钮,即可更改属性上的所有 css 类,因此 html 不会更改,但 css 类会更改,以获得 2 列视图。

这很好用。但后来我在想,如果用户选择 2 列视图并导航到下一页(它是一种分页列表),则视图将重置回原始视图(从 1 列开始)。

所以我做了以下事情。如果用户单击按钮,并从 1 columnview 转到 2 columnview,我将 window.name 中的值保存为 1 或 2。

之后我在这里构建了这个小脚本:

 $(document).ready(setView());

 function setView() {
     if (window.name != null) {
         if (window.name == 2) {
             window.Show2Cols();
         }
         if (window.name == 1) {
             window.Show1Col();
         }

     }
 }

这行得通。 Show2Cols() 方法的开头如下:

 function Show2Cols() {

 alert("Show2Cols is executed");
     var nodes = document.getElementById("panden").getElementsByTagName("div");
     alert("Just got all nodes.");
     for (i = 0; i < nodes.length; i++) 
     {....

所以,当我更改页面时,它会弹出说“Show2Cols 已执行”,但它没有说“刚刚得到所有节点”。

由于这是我第一个JS,不会变得更复杂,所以想请教一下,问题出在哪里?

我的猜测是 on (document).ready() 有效,但是 .getElementById() 方法还不起作用,因为页面上还没有任何内容(视觉上)。

提前致谢。

【问题讨论】:

  • 为什么要把jQuery和纯javascritp结合起来——一路用jQuery
  • $(document).ready(setView());;这将立即执行setView(括号使其成为调用)如果您想在加载DOM时运行该函数,您将$(document).ready(setView);

标签: javascript jquery document-ready


【解决方案1】:

问题在于您对函数的引用

$(document).ready(setView());

您正在执行该函数并将其值作为 DOM 就绪事件处理程序返回,这就是您所需要的

$(document).ready(setView);

【讨论】:

  • 不确定我是否同意编辑,对于没有经验的 jQuery 用户来说,代码的作用稍微清楚一些,但它不会促进代码优化。当大多数有经验的开发人员会使用 $(function) 方法时,我们经常会在问题上看到 $(document).ready()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多