此文要跟大家分享的是在项目开发中积累的js问题解决方案和经验,文章标题javascript你可能不知道的事只是个噱头或者说是我感觉这些经验对那些大牛(或经验比较丰富的人)可能只能算得上比较基础的东西了,但这并不妨碍我写这篇博客——我想对其它不知道这些经验技巧或曾被这些问题困扰过的程序员,应该还是会有一定帮助的,哪怕只有一点点儿,也是让我比较宽慰和高兴的事。所以,无论你愿不愿意看,我都将这些经验分享给你,^_^。
1.如果应该或本来正常显示的页面中的弹出层等,出现某些样式加载不上的情况(如:jquery-ui弹出层的样式加载不上),可能原因是:页面中存在重复的js文件引用。
2.在iframe中改变父窗体的url的代码实现:window.top.location = http://www.huohu123.com/?src=qd;
3.新窗口打开页面的另一种方法:
1 <a class="d" title="<%#Eval("ZPName")%>" onclick="javascript:return;" href="ajax/CommonProcess.ashx?method=searchOtherArticle&id=<%#Eval("ZPID")%>&type=<%#Eval("ZPType")%>"
2 target="_blank">
3 <div>
4 <img onclick="FarwardToZpViewPage(this)" src='<%#BLL.Util.GetZuopinThumbImage(Eval("ZPDefaultImg").ToString())%>'
5 alt="" /></div>
6 </a>
7 <script type="text/javascript">
8 function FarwardToZpViewPage(obj) {
9 if (document.all) {
10 // For IE
11 obj.parentNode.parentNode.click();
12 }
13 }
14 </script>
4.页面中的window.onload事件只会执行一次,如下:
<script type="text/javascript">
window.onload = function () {
alert(new Date().getTime());
};
window.onload = function () {
alert("ddfdfdfdfdf"); //——只会 弹出此提示
};
</script>
原因分析如下:window事件——可以理解为一个事件对象(集合),其底层代码大概实现:var winEventObj={}; winEventObj.onload= functionA;winEventObj.onload= functionB; 这段代码就很清晰了:最终 winEventObj.onload的值 肯定为:functionB。
5.js中对象是按引用传递的,如下:
function test123() {
var obj = new Object();
obj.Num = 123;
T1(obj);
alert(obj.isValid);//---输出 true
}
function T1(obj) {
obj.isValid = true;
}
6.jQuery和DOM对象的区别,如下代码
Test_Set和Test_Set2方法分别是在id为webTitle的标签的jQuery和DOM对象上设置(添加)一个showNo的属性,但不同的是,在jQuery对象上设置后再通过标签对象输出showNo的属性值却是'undefined',其原因,我的分析理解是:DOM对象(在内存中)存在真正的引用,而jQuery对象是其DOM对象的一个封装对象,并没有真实的引用存在。
function Test_Set() {
var obj = $("#webTitle")[0];
alert(obj);
obj.showNo = 121212;
alert(obj.showNo);
alert($("#webTitle")[0].showNo); //输出:121212
}
function Test_Set2() {
var obj = $("#webTitle");
obj.showNo = 121212;
alert(obj.showNo);
alert($("#webTitle").showNo); //输出:undefined
}
7.&&(与运算符)的另外一种用法——让代码更简洁点儿,其用法具体可参见上一篇文章(改进版)jQuery表单验证插件formValidator的插件里,示例如下:
!_jQuery_formValidator_validJqObj_Array && (_jQuery_formValidator_validJqObj_Array = new Array());
上面这行代码的最原始的写法是:
if (_jQuery_formValidator_validJqObj_Array == null) {
_jQuery_formValidator_validJqObj_Array = new Array();
}
这样意思就很明确了。这种用法比较特殊,类似于C#中如下代码
private PreferentialRuleDiscountRepository _repository = null;
private PreferentialRuleDiscountRepository Repository
{
get
{
return _repository ?? (_repository = new PreferentialRuleDiscountRepository());
}
}
即如果&&左边的条件成立为true,则执行右边的代码。
好了,目前能跟大家分享的就是上面这几点经验,再基础的都不能再写了,恐怕这些让人看了都很想拍砖了,呵呵...