这是导致null或不是对象错误的行
if(frm.elements["hdn_retain"+indexval].value==""){
....
} else {
....
}
答案 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)
frm
或frm.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
}
这不仅可以应用于这种情况,还可以应用于在使用之前确保某个命名空间可用的任何其他情况。