在javascript代码中获取null或不是对象错误

时间:2011-01-18 06:19:24

标签: javascript object null

这是导致null或不是对象错误的行

if(frm.elements["hdn_retain"+indexval].value==""){
   ....
} else {
   ....
}

4 个答案:

答案 0 :(得分:0)

frm.elements [“hdn_retain”+ indexval]可能是一个空对象。因此,获取值时会出错。如果frm.elements [“hdn_retain”+ indexval]首先为空,你可以检查它。

if(frm.elements["hdn_retain"+indexval] != null && frm.elements["hdn_retain"+indexval].value=="")

答案 1 :(得分:0)

frmfrm.elements["hdn_retain"+indexval]不是有效对象(dom中不存在),因此您无法访问它的属性。

你可以尝试类似的东西:

if(frm.elements["hdn_retain"+indexval] && frm.elements["hdn_retain"+indexval].value==""){

答案 2 :(得分:0)

以下是警告声明的结果:

alert("frm:::"+frm);
alert("frm elements::::"+frm.elements);
alert("frm hdn_retain :: "+frm.elements["hdn_retain"+indexval]);

frm:::[object]
frm elements::::[object]
frm hdn_retain :: undefined

答案 3 :(得分:0)

你可以使用这个实用工具方法getProperty我一直用来确保我得到一个嵌套的命名空间而不用担心是否定义了某些东西:

function getProperty(ns, obj) {
    var nsArray = ns.split('.'), 
        i       = 0, 
        nsLen   = nsArray.length;
    while (nsLen > 0) {
        var newNs = nsArray.shift();
        if (obj[newNs]) {
            obj = obj[newNs];
        } else { 
            return false;
        }
        nsLen = nsArray.length;
    }
    return obj;
};

var index = "hdn_retain" + indexval;
    // the following `value` will come back as a valid object/value or a false
    value = getProperty('elements.' + index + '.value', frm); 
if (value) {
  // do whatever
} else {
  // do not whatever
}

这不仅可以应用于这种情况,还可以应用于在使用之前确保某个命名空间可用的任何其他情况。