工作中碰到的js问题(disabled表单元素不能提交到服务器)
今天碰到一个奇葩的问题,asp页面表单提交后,有一个文本框<input type="text" name="phone" id="phone" />在后台获取不了,
这个标签在form表单内,也有name属性,但是在后台就是获取不了这个标签的值,而其他的文本框、复选框都可以获取到,这可就奇怪了!
几经周折,终于找到了原因,原来我在提交表单的时候,name = "phone"这个标签此时在一个javascript事件中被禁用了,即完整的该标签状态为:
<input type="text" name="phone" id="phone" disabled />
从而导致在asp后台不能phone这个参数的值。意思应该是phone标签在客户端被禁用了,表单提交就不会提交到服务器去。
解决办法,是设置该标签为可读:<input type="text" name="phone" id="phone" readonly="readonly" />
这样的话,既保证了标签内的东西不能随便修改,也能够提交到服务器里去
-------------------------------------------------------------------------------
--------------------- 其他js笔记 -----------------------------------------
------------------------------------------------------------------------------
1、图片预加载中,在谷歌浏览器获取图片的宽高为0px,代码如下:
var img = new Image(); img.src=”images/1.jpg”; var width=img.width+20;var height=img.height+75;
这段代码在IE/Firefox浏览器中,是能够获取到img对象的宽度和高度,但是在谷歌浏览器中获取宽高的值为0px。
什么原因?
应该是这段代码,在谷歌浏览器中图片还没加载完,此时获取图片的宽度和高度自然是0px。解决办法,应该写成:
var img = new Image(); img.onload=function(){ var width = img.width+20; var height = img.height+75; } img.src=”images/1.jpg”;
这样后不管在IE/Firefox, 还是在Google浏览器中,都可以获取图片对象的宽高了
2、想实现一个功能,页面有一个div区域,需要做到点击这个div区域外的其他地方,关闭这个div区域。所以需要做到获取鼠标的坐标,然后根据坐标位置和这个div的位置来隐藏:
//监听鼠标点击 document.onmousedown = function (event) { var xPos, yPos; //鼠标坐标 event = event || window.event; if (event.pageX) { xPos = event.pageX; yPos = event.pageY; } else { xPos = event.clientX + document.body.scrollLeft - document.body.clientLeft; yPos = event.clientY + document.body.scrollTop - document.body.clientTop; } var tmpObjs = $(".birDetailOn"); //需要隐藏的div块(可能有多个这种div) if (tmpObjs.length > 0) { var isHidden = true; for (var i = 0; i < tmpObjs.length; i++) { var obj = tmpObjs[i]; var top = $(obj).offset().top; //该div的距离顶部的位置 var left = $(obj).offset().left; //距离左边的位置 var width = obj.offsetWidth; //该div的宽度 var height = obj.offsetHeight; //该div的高度
//判断鼠标坐标是否在div区域之内(在div区域内,就不隐藏该div) if (xPos >= left && xPos <= (left + width) && yPos >= top && yPos <= (top + height)) { isHidden = false; } } if (isHidden) $(".birDetailOn").css({ "display": "none" }).removeClass("birDetailOn"); } }
3、JS中for循环支持break、continue、return关键字,效果和C#一样(break跳出循环,continue跳过当前循环,return方法里循环后所有代码都不在执行);
对于each循环,不支持break和continue关键字,支持return,return就像是for循环里面的continue关键字效果一样,碰到return当前循环的后面代码不再执行,执行下一个循环;
each支持return false,碰到return false就像相当于for循环中break,跳出循环,执行循环外后面的代码!