Home.Lu

My Links

Blog Stats

News

2011年5月19日 #

form提交的一个隐蔽问题

  昨天写代码碰到一个奇怪的问题,以前用得好好的一个功能,今天发现突然不行了。

  问题描述:

  提交的Form表单数据中,缺少了某些input的数据。

  问题查找:

  经调试跟踪发现,那些固定写在form中的input的数据一个没少,缺少的是由JS动态写入form中的input。

  难道是为了安全性,JS动态写入的input不让提交?不会的,以前做多附件上传时,file控件都是动态创建的。

  难道是没有写name属性?检查了也有。

  难道是我这批input都是同一个name不行?于是我用JS只写一个input控件到form,结果还是一样取不到。

  问题确认:

  就这么查了一个多小时没结果,正在我抓狂地看着页面上的HTML的时候,眼前突然放光,有一个span元素,结尾写错了,写成div了:<span>内容</div>。  

  NND,鸡头鸭尾了,这是谁干的??

  我确定是因为这里写错了,导致JS动态写入form中的input提交不上去。于是把这个修正,再测试,问题解决了。

  解决问题后:

  这么隐蔽的一个地方,确实难找,不是无意中看到,打死我也找不到。

  有人说VS里HTML不对的都会有警告的,从那里看就能看出来了。这个警告确实有,但是由于在MVC里,CSS文件都是通过Url.Content这么链入的,导致HTML中的所有css class都是找不到警告。而且由于功能需要,在很多元素上都添加了自定义属性也出了N多的警告。所以被一群警告淹没了,根本不能从警告列表中获取有用的信息。

posted @ 2011-05-19 10:27 Home.Lu 阅读(932) 评论(3) 编辑

2011年2月21日 #

关于近期招人面试的一些感想

  最近项目组要招人,我作为面试官,面试了好几个求职者了,但都不甚满意。

  我一般首先问他接触过什么技术,自己擅长什么技术,或者说哪方面的技术相对要突出点,然后根据他说他擅长的技术,从基本到深入提问,但是很多求职者,在自己说擅长的技术的一些基本问题都答不上来。

  一时答不上来,你起码得思考一下,面试时可以给你一点思考与组织语言的时间,但有些面试者不经思考就说这个不知道,这个问题很简单,网上一查就知道了。这句话我听到不止一两次了,有时一个面试者在一次面试过程中能听到好几次。我想说的是,再大的大牛,也是从一无所知开始,慢慢查资料积累,慢慢成长的,你可能是未来的大牛,但我们要招的是现在的小牛,我们无法预知你将来是否是大牛,也等不到你成大牛的那天。

  所以请正在找工作面试的求职者,在面试时碰到答不上来的问题,不要说“这个问题很简单,网上查一下就知道了”这句话。

posted @ 2011-02-21 22:53 Home.Lu 阅读(1044) 评论(8) 编辑

2011年1月24日 #

原创 jQuery 幻灯插件

  由于本人文笔较差,所以一直没勇气写第一篇博文,今天终于鼓足勇气,动手了。

  应朋友的邀请,帮他公司做一个幻灯播放效果,效果如下:

  

  缩略图正中间的为当前播放到的图片,两边呈发散状,逐渐缩小并降低透明度。假设当前正播放到第0张图片,则排列情况如下:

    0

   1 4

  2   3

  按逆时针方向转一张图后的排列情况如下:

    4

   0 3

  1    2

  这个只是缩略图的播放效果,缩略图轮转时,后面有对应大图跟着从右到左滚进,并且大图进入的速度要对应着缩略图轮转,整体效果如下:

  

 

  本人考虑将缩略图轮转与大图的滚进分开两部分,缩略图轮转做为一个单独的jQuery插件,由此插件中的事件带动大图的滚进。下面先来说说缩略图的轮转插件的实现:


 1、插件的参数:

this.defaults = {
       auto: false,        //是否自动播放
       width: 85,          //缩略图的宽度
       height: 42,         //缩略图的高度
       onstart: null,      //开始滚动
       onchange: null     //滚动事件
};


 2、插件的事件:

  onstart事件,为每次开始启动轮转时触发一次,转出的参数有:当前缩略图的jQuery对象与轮转到下一次缩略图的jQuery对象:

opt.onstart && opt.onstart(me.Images.img[curIdx].img$, me.Images.img[idx].img$);


  onchange事件,为每滚动一次距离就触发一次,并且当前滚动至百分之多少的进度参数:

opt.onchange && opt.onchange(stepPercent[step]);

  下面将要说到 stepPercent[step] 这个数组:

  缩略图轮转采用定时不定速度的方式,即每次轮转不过时轮转一张图还是两张图,时间都是固定的,但是轮转两张图的速度要比轮转一张图速度要快,这样即使有再多的图,滚动的距离再远,也不至于要很久才能滚到。


  stepPercent[step] 这个数组正是为这个设计的,每次轮转,都固定走15步,每一步轮转的距离都逐渐缩小,这样就达到了一个变速的效果,生成此数组的如下:

var stepPercent = new Array(15);    //固定走15步,每步走至百分之多少的一个数列。 表示经过时间一定,速度不固定
stepPercent[0] = 0.2;               //起始20%
stepPercent[1] = 0.2 + 0.2 * 0.81;   //第二步
for (var i = 2, total = stepPercent[1]; i < stepPercent.length; i++) {
    stepPercent[i] = total + (total - stepPercent[i - 2]) * 0.81;  //初始化数列。
    total = stepPercent[i];
     if (i == stepPercent.length - 1)
         stepPercent[i] = 1;
}

  起始第一步走20%,此后每一步都是前一步的81%,即速度每次递减19%,但是小数计算有个误差,到第15步时可能是个很接近于1,但是不是1的一个数值,所以,将第15步直接设置成1,即100%,滚动结束。

  (注:这个数列是如何设计出来的呢,我是用Excel,找一个单元格填上0.2,下一格公式为上一格的0.81,然后往下多拖一点,然后将上面的累加到接近1的数值,就是要的步数了。)

  这个数列如果不用JS生成,其实也可以将Excel中创建出来的数列直接定义一个数组,以后如果想要修改速度,再照做一次就行。

  

  轮转时,缩略图的尺寸、透明度、位置等信息的计算,都采用此stepPercent数组设定好的比例因子。

  关于插件其他不在赘述,请直接下载源代码查看,下面说说大图如何跟着缩略图滚动。


 3、大图滚动

  大图在随着缩略图滚动时,不过滚动到第几张,表现出来的效果都是紧跟着当前大图的后面滚进,以防跳过太多张时,由于速度太快,造成眼花缭乱的感觉,所以这里这个onstart事件就派上用场了。

  在onstart事件中,先将当前图移动到大图列表首位、再将目标图移动到当前图的后面,(注:要将当前图移动到大图列表首位,是因为有可能下一张在当前张的前面,当前张移到后面,滚动条位置会动)。

  然后在onchange事件中,只要根据传入的进度参数,设置横滚动条的滚动距离就行了,大图的滚动就这么简单。具体JS如下:

$(function() {
	$("#div_Slide").Slide({
		auto: true,
		width: 85,
		height: 42,
		onstart: function(curImg, nextImg) {
			var cData = curImg.attr("data");
			var nData = nextImg.attr("data");
			var bigCur = $("#" + cData), bigNext = $("#" + nData);

			var allBigImg = bigCur.parent().children("img");
			var curIndex = allBigImg.index(bigCur[0]);
			var nextIndex = allBigImg.index(bigNext[0]);

			var firstImg = $(allBigImg[0]);
			if (firstImg.attr("id") != bigCur.attr("id"))
				bigCur.insertBefore(firstImg);
			$("#div_BigImg").scrollLeft(0);
			bigNext.insertAfter(bigCur);
		},
		onchange: function(percent) {
			$("#div_BigImg").scrollLeft(1263 * percent);
		}
	});
	var bigDiv = $("#div_BigImg");
	var bigDivPos = bigDiv.position();
	bigDiv.scrollLeft(0);    //初始时将滚动条滚到头,是因为我发现当滚动条不在头时,按F5刷新,滚动条不会跳到头。

	$("#div_Slide").css({
		"top": (bigDivPos.top + bigDiv.height() - $("#div_Slide").height()) + "px",
		"left": bigDivPos.left + "px"
	});
});


源码下载:SlideDemo

 

在使用中发现有问题或者有可改进的地方,请留言,谢谢。

posted @ 2011-01-24 14:49 Home.Lu 阅读(2803) 评论(14) 编辑

仅列出标题