JavaScript 代码中获取 null 或非对象错误

发布于 2024-10-12 05:56:12 字数 142 浏览 1 评论 0原文

这是导致 null or not an object 错误的行

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

Here is the line which is causing null or not an object error

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

丶视觉 2024-10-19 05:56:12

frm.elements["hdn_retain"+indexval] 可能是空对象。所以,获取值的时候会出现错误。您可以先检查 frm.elements["hdn_retain"+indexval] 是否为 null。

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

frm.elements["hdn_retain"+indexval] may be a null object. So, it will have error when getting the value. You can check the frm.elements["hdn_retain"+indexval] if it is null first.

if(frm.elements["hdn_retain"+indexval] != null && frm.elements["hdn_retain"+indexval].value=="")
维持三分热 2024-10-19 05:56:12

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

你可以尝试这样的事情:

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

Either frm or frm.elements["hdn_retain"+indexval] isn't a valid object (doesn't exist in the dom) and therefore you can't access it's property.

you could try something like:

if(frm.elements["hdn_retain"+indexval] && frm.elements["hdn_retain"+indexval].value==""){
无风消散 2024-10-19 05:56:12

以下是警报语句的结果:

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

Following is the result of alert statement:

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
柏拉图鍀咏恒 2024-10-19 05:56:12

你可以使用这个实用方法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
}

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

you can use this utility method getProperty i always use to make sure i get a nested namespace back without worrying about whether or not something is defined:

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
}

this can be applied not only to this situation but to any other situation you need to make sure a certain namespace is available before usage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文