【问题标题】:jquery function firing earlyjquery函数提前触发
【发布时间】:2013-12-01 02:46:51
【问题描述】:

在我的脚本中,有问题的函数位于末尾

$(jquery).ready(function(){...});

由于某种原因,它在 DOM 加载之前触发。我将在下面发布整个脚本。我对第 246-248 行发生的事情很感兴趣。

这是错误的部分

alert(listObj.listOffset);
listObj.allLists.offset({ left: listObj.listOffset });
listObj.allLists[listIndex].focus();

更多细节

脚本的这个特定部分试图将重点放在今天。有一个布局对象应该启用这个过程。它需要在 DOM 加载后运行,以便计算布局偏移变量。当它提前加载时,偏移量最终为 15000px 而不是 400ish。

如果您可以提供一些要寻找的东西,那可能会帮助我弄清楚,即使您无法确定解决方案。我知道这是很多代码。这是一款需要很多人参与的企业应用。

我的文件脚本部分

        // bind listeners to time input fields
$('.timeBlock').on("blur", validateHrs);
$('.timeBlock').keyup(function () {
    var listObj = new LayoutObj();
    listObj.tabNav();
});

// bind listeners to prev/next buttons
$('.previous, .next').on("click", function () {
    var str = $(this).attr('class');
    var obj = new LayoutObj();
    obj.navDates(str);
});

// calculate totals for stored inputs
totalHrs();

// highlight today's date
var today = new Date();
var thisMonth = today.getMonth();
var thisDate = today.getDate();
var dateStr = '';
var splitDates = new Array();
var fullDates = new Array();
var listIndex;
var listObj;

fullDates = $('.dateNum');
fullDates.each(function (index) {
    splitDates[index] = $(this).text().split('/');
});

for (var i = 0; i < splitDates.length; i++) {
    if (thisMonth === (parseInt(splitDates[i][0], 10) - 1) && thisDate === parseInt(splitDates[i][1], 10)) {
        thisMonth += 1;
        thisMonth += '';
        thisDate += '';
        if (thisMonth.length < 2) {
            dateStr = "0" + thisMonth + "/";
        }
        else {
            dateStr = thisMonth + "/";
        }
        if (thisDate.length < 2) {
            dateStr += "0" + thisDate;
        }
        else {
            dateStr += thisDate;
        }
        fullDates[i].parentNode.setAttribute('class', 'date today');
        listIndex = i;
    }

    //The following code will shift the job lists to reveal today's date ///////, if it is not in the view on load.

}
var listObj = new LayoutObj();
listObj.listOffset = listObj.cellWidth * (listIndex + 1);

//alert(listObj.listOffset);
listObj.allLists.offset({ left: listObj.listOffset });
listObj.allLists[listIndex].focus();
});

布局对象

【问题讨论】:

  • 圣典蝙蝠侠。你能不能把那堵文字墙剪掉一些?
  • 查看头像/用户名。有这么多手……很多代码!哈哈
  • 我不知道他为什么被否决,他已经按照指南发布了一个完整的问题
  • 我不知道你需要多少,因为我不知道问题出在哪里。 .ready() 方法在相关行之后结束。
  • .ready() 方法之后的所有内容都无关紧要。您可以通过从 ready 方法中删除代码来开始调试,以查看问题是否仍然存在。然后发布演示问题的最小版本。

标签: jquery domready


【解决方案1】:

你应该使用:

$(document).ready(function () { ... });

当您说它在加载 DOM 之前触发时,在脚本中您已将整个代码放入文档就绪块中。这些代码是否会影响大小?

您确定代码没有损坏吗?例如,您可以拉出该块并将其绑定到单击事件。

【讨论】:

  • 或者只是将代码放在页面底部而不使用 document.ready :)
  • @DavidChase 只是为了好看,让我们分开。这里是 HTML,那里是 JS。 :)
  • 为什么你认为这会解决它?他的格式非常好,如果你有 $ 冲突,这是必要的(尽管他在 .ready() 之外的代码是错误的)。
  • 我更正了问题的第一行,在他粘贴的实际代码中,他做得正确。
  • @MelanciaUK 我是关于 SOC 我说如果你把 js 放到一个名为 script.js 的文件中并且你把它放在页面的底部你不必担心 document.ready,你绝对不希望在你的 html 中出现 javascript 代码块......这是一个甚至是 SO 参考 goo.gl/dBoRV
【解决方案2】:

问题是第三方脚本!愚蠢的脚本!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多