总结一些这些年遇到的javascript的坑,当然也是自己学艺不精.现总结如下
(1)声明js函数(js方法)时报错
原因是:缺少function关键字.
正确的应该是:
- com.whuang.hsj.getCustomAttr=function(htmlNode22,attr)
- {
- var hospitalId=htmlNode22[attr];
- if(hospitalId==undefined||hospitalId==null){
- hospitalId=htmlNode22.getAttribute(attr);
- }
- return hospitalId;
- }
(2)浏览器报错缺少分号
- var isHasObj = eval('(' + obj + ')');
- int errorType=isHasObj.errorType;//见常量类
- if (isHasObj.success) {
- jInfo("亲,工作辛苦了!", "签到成功", null);
- }else{
- if(errorType==1){
- jAlert("主人,邮箱记错了吧!", "签到失败", null);
- }else{
- jAlert("额,主公不给力啊!", "签到失败", null);
- }
- }
根本原因:javascript中使用int
解决方法:
把int改为var
(3)js报错 Out of memory at line xxx
原因:函数同名,参数列表不同;js中没有重载,下面的函数会覆盖上面的函数,导致函数调用自身,产生了无限循环.
修复方法:在其中一个函数名后加2,使两个函数的函数名不同。
- com.whuang.hsj.isSel4CheckboxbySequence=function(prefixStr,countMin,countMax){
- var initBool=false;
- for(var ik=countMin;ik<=countMax;ik++){
- var checkbox227=com.whuang.hsj.$$arr(prefixStr+ik);
- if(checkbox227==null||checkbox227==undefined){
- }else{
- if(com.whuang.hsj.isCheckcheckbox(checkbox227)){
- initBool=true;
- checkbox227=null;//free memory
- break;
- }
- }
- }
- return initBool;
- };
- /**
- * example:input type="checkbox" name="id_selected_1"
- * @param {Object} prefixStr
- * @param {Object} countMax
- * function name must use diffrent name !!!
- */
- com.whuang.hsj.isSel4CheckboxbySequence2 = function(prefixStr, countMax){
- return com.whuang.hsj.isSel4CheckboxbySequence(prefixStr,1,countMax);
- };
(4)TypeError: document.getElementsByName(...)[0] is undefined
详细错误信息:
有问题的代码:
根本原因是:页面没有加载完,所以document.getElementsByName("user.username")得到的是null或undefined
正确的代码:
注意:红框中的内容是我增加的.
(5)斜杠导致报错
原因是:\u ,\upload中
(6)我们经常在超链接的href中执行javascript代码
例如
这里的this不是超链接对象,而是window(浏览器全局对象)
(7)对象中多了一个逗号
最后一个逗号应该去掉,当然不去掉有的浏览器也不报错.
(8)为什么js始终不执行呢?
原因:因为javascript指定了src属性,所以不会执行,应该把src属性去掉