IE6 Bug之select动态赋值

问题:使用ie测试时发现一处脚本报错,经过alert排查出引发问题的代码。此代码在其他浏览器下正常,但是ie6下报错。

排查:与技术沟通确认代码功能是将select最新服务器设为选中状态。服务器列表是动态生成的。

解决直接上代码:

        if ($.browser.msie && ($.browser.version == "6.0") && !$.support.style) {
            window.setTimeout(function(){//ie6需要稍微延迟  
                groupSelect.val(max_groupId);  
            }, 0);  
        }else{
            groupSelect.val(max_groupId)
        }

原因:因为在往select中动态添加option时,浏览器执行javascript设置select的属性的时候浏览器可能还没将它们渲染到页面中(ie6),因此使用setTimeout可以使浏览器渲染线程先将元素渲染到页面中区,再使用javascript线程执行改变它们属性的操作。

参考:
http://snailxr.iteye.com/blog/1300173

Javascript 倒计时

今天同事遇到一个小问题,就是一个按钮,点击后发送一些东西,倒计时5秒后,再进行发送操作(延迟重复操作)。我看了下写的代码,感觉逻辑比较乱,又上网搜索了一下,发现这段代码。整体看下来比较简单,按照需求进行修改后,就实现效果了。

var i=5;
function clock(){
	//document.title="本窗口将在"+i+"秒后自动关闭!";
	document.getElementById("s").innerHTML = i;
	if(i>0)
		setTimeout("clock();",1000);
	else
		//self.close();
		window.history.back(-1);  // 跳转到其他页面
	i--;

主要修改就是将if及else添加{}使其成为代码段,然后在else里面定义i的值为6。这样当第一次倒计时完成后,再次点击按钮后,仍然继续倒计时。

这里的关键是:setTimeout(“clock();”,1000);看到调用了函数的本身。

利用setTimeout实现选项卡延迟切换

  选项卡延迟切换,就是当鼠标移到选项卡上面后,内容不立即进行切换,而是当停留一段时间后,才进行切换。这样避免当鼠标经过时,产生不必要的切换。这个事情,本来不是很注意,在后来添加的过程中意识到这个的重要性。

  这个通过setTimeout来实现,方法用于在指定的毫秒数后调用函数或计算表达式。

  语法:

  setTimeout(code,millisec)

  code (必需):要调用的函数后要执行的 JavaScript 代码串。可以为一个function函数。

  millisec(必需):在执行代码前需等待的毫秒数。

  由于是修改之前的tab选项卡,直接上代码,

  

    $menu_item.hover(function(){
		var index = $menu_item.index($(this));
		var item = $menu_item.length - 1; //取最后一项索引
		//alert(item);
        if (delay)
		clearTimeout(delay);
		delay = setTimeout(function(){
			$($menu_item.get(index)).removeClass().addClass("actived").siblings().removeClass("actived");
			$("#" + content).find("div").eq(index).show().siblings().hide();
        }, 500)
		},function(){
		if (delay) 
        clearTimeout(delay);
	}
	) 

  通过设置初始变量,来进行操作。参考一个网站的实现,原来过程是用onmouseover和onmouseout这里采用jQuery的hover,来代替了。