RSS
 

Javascript 倒计时

24

今天同事遇到一个小问题,就是一个按钮,点击后发送一些东西,倒计时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);看到调用了函数的本身。

 
 

javascript arguments对象—函数的实际参数

21

在javascript函数体内,标识符arguments具有特殊含义。它是调用对象的一个特殊属性,用来引用Arguments对象。javascript函数体内,arguments像数组(并不是真的数组,是一个Arguments对象,再次强调)一样,有length属性,可以代表传给函数的参数的个数。

引用一个形式参数可以用参数名,也可以用arguments[]数组形式,其中arguments[0]表示第一个参数。所以,javascript中Arguments对象是函数的实际参数.

js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined。

我们可以借助arguments的length属性来检测调用函数时是否使用了正确数目的实际参数,因为javascript是不会为你做这些事的。

1、使用arguments,可以无法指出参数名的情况下进行访问

2、arguments可以看错为一个参数列表数组,通过argument[index]的形式对参数进行访问

3、arguments.length获得参数列表长度

例一:

function f(x,y,z)
{
//首先检查传递的参数数量是否正确
if(arguments.length != 3)
{
throw new Error("function f called with " + arguments.length + "arguments ,but it not 3 arguments.");
}
//下面运行真正的函数
}

例二:

arguments 为特殊对象,无需明确指出参数名,就能访问它们。用 arguments[0], arguments[1] 依次类推出参数。

function sayHello() {
      if (arguments[0] == "bye")
      return;
      alert(arguments[0]);
}

1.调用 sayHello(‘bye’) , 直接返回,无任何信息
2.调用 sayHello(‘HelloWorld’), 提示 ”HelloWorld”

例三:

上面对arguments的介绍,结合argument.length.就可以实现方法的重载,虽然不是很方便,但却可以绕开ECMASCript不能重载的限制了。

function test(){
  if(arguments.length==1){
  alert(arguments[0]);
  }
  else if(arguments.length==2){
  alert(arguments[0]+arguments[1]);
  }
}

test(2);//2
test(1,2);//3

 
 

程序员,你要爱你的身体,胜过Java和.Net。——又一次昏倒在地。反思。

21

(☆文/孙继滨

上周四(8月12日),我又一次昏倒了。

当时,正值半夜12点,正和朋友吃串。酒足串饱之后,笑着起身离开之际,“头晕。”我对朋友说,“借肩膀靠一下。”“别靠得那么近。会让人误解的!”朋友笑着说,却看到我慢慢地滑倒在地。

醒来的时候,已经是在医院的急救室。输着液,呼吸着氧气,洁白的病床,还有一位年轻的小护士紧张地看着我。“她好漂亮啊!”我心中感叹,“活着真好,有这么漂亮的MM可看。”。

这不是我第一次昏倒了。

上一次是在东京,在多年前,我还是个程序员的时候。那一刻记忆非常清楚,我在一个周末的下午,出门去朋友家玩。突然觉得一向很熟悉的街景,仿佛异常美丽和真实。周围的一切都仿佛带有光泽和神圣的美丽,还有一种温暖的感觉。

“心情好,连景色都这么美?”我不觉微微一笑。走着走着,我终于怔住了,原来——我从来没有在阳光下走过这条路,尽管这是我上班和出行的必经之路。

那个时候,为了做项目,经常忙得天昏地暗。搬到那里之后,就一直在加班。每天7:00就要出门赶列车,晚上11:00才从班上往回赶,后半段还是凌晨的末班车,到家都要12点半了。然后还要学习日语学习数据库,考试考证……,至于阳光???

无疑,那段时间是充实的、精神上甚至有些愉快。但是,终于有一天,在列车上,我突然失去了知觉。睁眼一看,周围一色的日本人在问:“你怎么了?大丈夫?”

从那儿之后,我才知道,我的身体并不是工商银行,禁不起这样的恶性透支。从那次以后,我就感觉身体很不如前了,就不再那么拼命工作了。

但是,直到今天我才意识到——原来,问题一直存在,只不过它在等待,等待发作的机会!

昨天(8月17日),我出院了。医院没有检查出我有任何病症。但是,医生这样跟我说:“你不是亚健康。你是季健康。”她的话我懂。她是说,我确实有病,但处在轻微到还检查不出来这个阶段。换句话说,这病一直在玩潜伏,寻找着下一次露脸的机会。

我相信,很多程序员都有过类似的经历,为了出人头地,为了项目成功,不惜牺牲一切。“身体?我年轻,我本钱足着呢!”加班加点,任劳任怨,没时间相亲,没时间泡妞,没时间保养自己的身体。然而,这真的值得吗?

如果你拼了老命,最后成功了,然而身体却垮了,其实你就是一个成功的牺牲品。更不爽的是,万一还没有到成功那一刻,你的身体就先垮了,那么,你就会成为一个成功的废品。

所以,作为一个过来人,希望程序员朋友们记住三条:

——要给自己时间泡妞!不要将来为没有好LP而悔恨流泪。

——要给自己时间和朋友们多聚聚!不要将来为没有好朋友而孤单寂寞。

——要给自己身体时间,让它好好休养!不要将来有了好女朋友却无力上床,不要将来有了好朋友却无力一起吃喝玩乐。

出院的时候,一个病友家属给我的建议是:不抽烟不喝酒早睡觉,睡觉前用热水泡脚一小时。其实,在他大放厥词的时候,我留意了这家伙一下,他现在35岁,看起来就像25岁的刚出校园的校草。

在这里,就向程序员朋友们说声:记着点儿,睡觉前要泡泡脚!

———– 欢迎访问老孙的微博 http://t.sina.com.cn/laosunisme 进行互动交流 ———–

 
 

xhtml与html的区别

18

XHTML是XML的的一种应用,是HTML向XML的过渡型语言。

差别:

文档应该是结构良好的,也就是说所有的元素都必须有结束标签或者以特殊的方式书写,而且所有的标签必须合理地嵌套。元素名称和属性必须小写,对于非空标签,也需要结束标签,属性值必须总是使用引号包裹,属性值使用引号,禁止属性简化。

说明:给所有属性赋一个值,XHTML规定所有属性都必须有一个值,没有值的就重复本身。不要在注释内容中使“–”,图片必须有说明文字,每个图片标签都必须有ALT说明文字。

用id属性代替name属性。如:
HTML 4.01 中为a,applet, frame, iframe, img 和 map定义了一个name属性.在 XHTML 里name属性是不能被使用的,应该用id 来替换它。

XHTML的现行规范

1. XHTML 1.0 Transitional – 过渡型,标识语法要求较宽松

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。

2. XHTML 1.0 Strict – 严格型,标识要求达到以上XHTML相比于HTML的所有改动
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“>
要求严格的DTD,你不能使用任何表现层的标识和属性,例如font,b。

3. XHTML 1.0 Frameset – 框架集定义
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd“>
专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD.\

4. XHTML 1.1 – 模块化的XHTML

5. XHTML 2.0 – 完全模块化可定制化的XHTML,正在开发中,参考http://w3.org/

 
 

随机输出数组中的一个数

17

数组中存放十个数字,随机输出一个。今天别人问到我的,傻乎乎的,想了个特别笨的方法。忽忽~~下面两行代码就可以搞定的事,按我说的要N行代码才可以实现。思路是相通的~可能我看了代码后,也会优化的。

var abc = [1,2,12,15,16,18,45,50,41,43];
console.log(abc[(Math.floor((Math.random()*9+1)))]);

Math.random();  无参数,返回0和1之间的伪随机数,可能为0,但总是小于1,(0,1)。
Math.floor(x);  返回小于等于数字参数的最大整数,对数字进行下舍入。x — 为number类型的数字,返回小于等于x的最大整数。

 
 

IE6/7下tr的border问题

11

在做东西的时候,发现IE6,IE7不支持tr的border样式,FF和IE8支持tr的border样式。

网上有一个方法是把tr设成块级元素,就可以有边框了。(但是测试是无效的)

解决方法是:将table设置border-collapse:collapse,然后给td设置边框。

 
 

从iframe中关闭父窗口中的层

09

在做弹层的时候,由于里面涉及到搜索,及翻页等效果实现,而且要求不能翻页,考虑到采用ajax来实现太过麻烦,后来就折衷使用了iframe。

大概流程如下:

在页面打开添加推荐时,弹出iframe(由本页面的一个层包裹),在iframe页面选中要推荐的信息时,点击加入推荐按钮后,关闭iframe页面。这里由于之前没有接触过,有些纠结。问了一个程序,原来实现这么简单。

代码如下:

  //关闭弹层
  $(".close_button").click(function(){
		parent.closeFrame();
  });

这里做一个函数,上面代码在$的环境下。

//关闭iframe
	function closeFrame(){
		$(".hot_house").hide();
	}
<strong>parent:该变量指的是包含当前分割窗口的父窗口。如果在一个窗口内有分割窗口,而在其中一个分割窗口中又包含着分割窗口,则第2层的分割窗口可以用parent变量引用包含它的父分割窗口。</strong>
 
 

用jQuery offset()实现部分层蒙板效果

09

在编辑页面遇到一个怪异的需求,列表那块是不能选的,效果是半透明,里面的内容不可点击。由于前天刚刚实现了,弹出层根据位置进行定位的效果,就又想到了,建立一个遮罩层,定位其位置,增加其z-index来实现。

开始的时候,想到把层包起来,然后设置透明,但是发现点击效果不可实现。

后来修改为直接在页面写一个层出来,先将其隐藏,当页面加载的时候,动态获取其宽度和位置来实现,具体代码如下:

	$(function(){
		$(".wrap").show();
		var warp_pos = $(".house_list").offset();
		var warp_width = $(".house_list").width();
		var warp_height = $(".house_list").height();
		var warp_pos_left = warp_pos.left;
		var warp_pos_top = warp_pos.top;
		$(".wrap").css({position:"absolute",width:warp_width,height:warp_height,top:warp_pos_top,left:warp_pos_left,background:"#fff"});
	})
 
 

jquery offset和position方法

06

今天处理一个页面效果的时候,遇到一个难题,就是在页面中的一个层中,单击添加按钮,弹出一个层显示在相应的位置,由于是一片推荐区域,可以具体到一块,点击推荐,就弹出到相应的位置。

想了一下,想到了jquery offset和position方法,由于之前只是肤浅的知道,但是没有用过,就查了些资料,做了些测试,想要的效果实现了,比之前预计的,要轻松一些。jQuery集成了这个方法,使各浏览器的兼容性,不需在考虑,真的很棒。

先温习一下两个各自的作用。

jquery offset()方法

获取匹配元素在当前视图的相对偏移。返回的对象包含两个整型属性:top 和 left。此方法只对可见元素有效。

jquery position()方法

获取匹配元素相对父元素的偏移。返回的对象包含两个整型属性:top 和 left。为精确计算结果,请在补白、边框和填充属性上使用像素单位。此方法只对可见元素有效。

我对两个分别进行了测试,测试了对应的位置。
html部分:
<p>Hello</p>

<p>2nd Paragrap</p>

脚本部分:

$(function(){
	var p = $("p:last");
	var offset = p.offset();//这里可以替换成positon()进行测试
	alert( "left: " + offset.left + ", top: " + offset.top );
})

根据情况选用了,offset来实现。大体流程如下:
先取得按钮父级元素的位置,把值赋值给两个变量来存諸,将要显示的层,进行定位,再显示出来。

  $(".add_remm_button").live('click',function(){
		var offset = $(this).parent().offset();
		var left = offset.left;
		var top = offset.top + 100;
		$(".add_house").css({position:"absolute",top:top,left:left});
		$(".add_house").show();
  });
 
 

onchange,onpropertychange,oninput有何区别

06

onpropertychange:当在对象上进行属性改变时候触发
onchange:当对象内容或者选择内容改变时候触发

当一个HTML元素的属性改变的时候,都能通过onpropertychange来捕获。例如一个<input name=”text1″ id=”text1″ />对象的value属性被页面的脚本修改的时候,onchange无法捕获到,而onpropertychange却能够捕获。

具体可以狭义地理解为:onpropertychange能及时捕获属性值的变化,而onchange在属性值改变时只有通过鼠标执行某些操作才能激活该事件!

onchange,onpropertychange,oninput这三个事件句柄(Event Handlers)有何区别。

* onchange触发事件必须满足两个条件:1、当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效),2、当前对象失去焦点(onblur);

* onpropertychange的话,只要当前对象属性发生改变,都会触发事件,因此用途更为广泛,只可惜它是IE only;

* oninput是onpropertychange的非IE浏览器版本,支持firefox和opera等浏览器,但有一点不同,它绑定于对象时,并非该对象所有属性改变都能触发事件,据我所知,它只在对象value值发生改变时奏效。