相关疑难解决方法(0)

为什么setTimeout(fn,0)有时会有用?

我最近遇到了一个相当讨厌的错误,其中代码是<select>通过JavaScript动态加载的.这种动态加载<select>具有预先选择的值.在IE6中,我们已经有了修复所选内容的代码<option>,因为有时它<select>selectedIndex值与所选<option>index属性不同步,如下所示:

field.selectedIndex = element.index;
Run Code Online (Sandbox Code Playgroud)

但是,此代码无效.即使selectedIndex正确设置了字段,最终也会选择错误的索引.但是,如果我alert()在正确的时间插入声明,则会选择正确的选项.考虑到这可能是某种时间问题,我尝试了一些随机的东西,我之前在代码中看到过:

var wrapFn = (function() {
    var myField = field;
    var myElement = element;

    return function() {
        myField.selectedIndex = myElement.index;
    }
})();
setTimeout(wrapFn, 0);
Run Code Online (Sandbox Code Playgroud)

这有效!

我已经找到了解决问题的方法,但是我很不安,因为我不知道为什么这会解决我的问题.有人有官方解释吗?使用"稍后"调用我的功能可以避免哪些浏览器问题setTimeout()

javascript dom event-loop

833
推荐指数
11
解决办法
23万
查看次数

for循环中的setTimeout不会打印连续值

我有这个脚本:

for (var i = 1; i <= 2; i++) {
    setTimeout(function() { alert(i) }, 100);
}
Run Code Online (Sandbox Code Playgroud)

但是3两次都被提醒,而不是1那时2.

有没有办法传递i,而不是将函数写为字符串?

javascript

254
推荐指数
7
解决办法
19万
查看次数

Javascript:如何在'for'循环中更新进度条

我有一个问题,我试图把一个JS脚本放在一起.我有一个HTML表,其中有300行的邻居.我已经创建了一个sort函数,可以使表头可以点击并启动我的sort函数.我想集成一个进度条,因为在单击标题后,在较大的表(500 - 1000行)中,表需要一些时间来排序(IE是一个大罪犯).进度条会告诉他们在排序完成之前剩余多少时间.我想到的方法是一个div元素,我将根据排序循环的进展调整大小.问题是我似乎无法弄清楚如何将这样的例程集成到我的循环中.

我已经研究过这个问题并注意到了这一点:如何在循环中更改进度条? 并且:在循环多个变量时使用setTimeout更新进度条

第二个主题有几个演示,基本上就进度条进行了我想要做的事情.但是,无论何时我尝试实现这两个帖子中显示的解决方案,我要么:

A - 崩溃浏览器

B - 进度条似乎有效,但是立即从0到100%,而不是逐步进行.

我希望有人可以带领我朝着正确的方向前进.此表排序进度指示器必须使用本机JS完成,因为内容必须可脱机使用,因此我不能通过CDN包含任何jQuery库,并且不希望使用整个jQuery库膨胀文档.

我用它的代码创建了一个JS小提琴.我已经删除了我对进度条码所做的事情,因为我一直在崩溃浏览器,所以就脚本而言,所有这些都是与排序相关的代码.的jsfiddle

这是JS本身:

//Change this variable to match the "id" attribute of the
//table that is going to be operated on.
var tableID = "sortable";

/**
 * Attach click events to all the <th> elements in a table to 
 * call the tableSort() function. This function assumes that cells  
 * in the first row in a table are <th> headers tags and that cells
 * …
Run Code Online (Sandbox Code Playgroud)

javascript

5
推荐指数
1
解决办法
7970
查看次数

标签 统计

javascript ×3

dom ×1

event-loop ×1