我最近遇到了一个相当讨厌的错误,其中代码是<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()?
我有这个脚本:
for (var i = 1; i <= 2; i++) {
setTimeout(function() { alert(i) }, 100);
}
Run Code Online (Sandbox Code Playgroud)
但是3两次都被提醒,而不是1那时2.
有没有办法传递i,而不是将函数写为字符串?
我有一个问题,我试图把一个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)