当对象不运行时,JavaScript会中断';不存在

当对象不运行时,JavaScript会中断';不存在,javascript,javascript-objects,Javascript,Javascript Objects,我有一个带有不同标签的表单。其中一个选项卡需要设置授权,以便只有某些用户才能看到它 问题是这种授权破坏了任何受表单选项卡限制的用户的Javascript——如果您有授权,它可以正常工作。原因是代码引用的选项卡中有复选框/文本字段,因此代码中断。它找不到这些对象 我需要一种忽略这些复选框/文本字段的方法,这样代码就不会中断 下面的事件调用一个名为CommStat的函数。例如,如果$(“#ADD_CH”)位于设置了授权的表单选项卡上,则该选项卡在运行时不存在,因此代码中断 $("#STATUS").

我有一个带有不同标签的表单。其中一个选项卡需要设置授权,以便只有某些用户才能看到它

问题是这种授权破坏了任何受表单选项卡限制的用户的Javascript——如果您有授权,它可以正常工作。原因是代码引用的选项卡中有复选框/文本字段,因此代码中断。它找不到这些对象

我需要一种忽略这些复选框/文本字段的方法,这样代码就不会中断

下面的事件调用一个名为CommStat的函数。例如,如果
$(“#ADD_CH”)
位于设置了授权的表单选项卡上,则该选项卡在运行时不存在,因此代码中断

$("#STATUS").change(function() {
    CommStat('STATUS', 'STATUS_COMMENT');
});

$("#DISPOSED").change(function() {
    CommStat('DISPOSED', 'VER_COMM');
});

$("#ADD_CH").change(function() {
    CommStat('ADD_CH', 'ADDRESS3');
});

$("#U_STAND").change(function() {
    CommStat('U_STAND', 'IN_COMM');
});

$("#M_INAP").change(function() {
    CommStat('M_INAP', 'IN_COMM');
});

$("#U_INAP").change(function() {
    CommStat('U_INAP', 'IN_COMM');
});

$("#CON_RATE").change(function() {
    CommStat('CON_RATE', 'IN_COMM');
});

$("#BEYOND").change(function() {
    CommStat('BEYOND', 'IN_COMM');
});

$("#OUT_INT").change(function() {
    CommStat('OUT_INT', 'IN_COMM');
});
有没有一种简单的方法可以忽略任何不存在的对象? 我已经花了很多时间试图让这个工作,通过论坛等寻找,但没有任何运气

一个建议是在附加事件之前检查对象是否存在

e、 g

不过运气不好


希望这是有意义的,

您可以使用jQuery进行检查

if ($('#myElement').length > 0) { 
    // it exists 
}

哪一个更优雅,但这不能解释破损的原因

谢谢你的回复。今天早上我用下面的方法弄明白了。如果文本字段不存在,简单的try-and-catch将忽略该字段

CommStat('DISPOSED', 'VER_COMM');
        CommStat('STATUS', 'STATUS_COMMENT');
        CommStat('ADD_CH', 'ADDRESS3');
try {                                                                           // JG300714
        CommStat('U_STAND', 'IN_COMM');
        CommStat('M_INAP', 'IN_COMM');
        CommStat('U_INAP', 'IN_COMM');
        CommStat('CON_RATE', 'IN_COMM');
        CommStat('BEYOND', 'IN_COMM');
        CommStat('OUT_INT', 'IN_COMM');

    }                                                                               
    catch(e){// Ignore any error                                                // JG300714                                                 
    }               

到底是哪一部分断裂了?As
$(“#不存在”).change(…)
不应该抛出错误,因为它不存在,所以没有什么可以设置回调。由于未设置回调,因此不会使用回调,因此其中的任何代码都不会运行。如果某个特定ID不存在,则
$('#foo')
应返回一个空的jQuery对象,这不会导致错误。所以你的问题可能在别的地方。您可能需要发布(稍微)更多的代码。但不需要检查
$field.length
。正如我所评论的。然而,无论什么原因都可以在另一个世界中探索。
var myFields = {
  "STATUS":"STATUS_COMMENT",
  "DISPOSED", "VER_COMM",
 ...
  "OUT_INT", "IN_COMM"
}
$.each(myFields,function(fName, func) {
  var $field=$("#"+fName);
  if ($field.length) $field.on("change",function(){
    CommStat(fName,func);
  });
 });
CommStat('DISPOSED', 'VER_COMM');
        CommStat('STATUS', 'STATUS_COMMENT');
        CommStat('ADD_CH', 'ADDRESS3');
try {                                                                           // JG300714
        CommStat('U_STAND', 'IN_COMM');
        CommStat('M_INAP', 'IN_COMM');
        CommStat('U_INAP', 'IN_COMM');
        CommStat('CON_RATE', 'IN_COMM');
        CommStat('BEYOND', 'IN_COMM');
        CommStat('OUT_INT', 'IN_COMM');

    }                                                                               
    catch(e){// Ignore any error                                                // JG300714                                                 
    }