当对象不存在时,JavaScript会中断

时间:2014-07-28 02:59:08

标签: javascript javascript-events javascript-objects

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

问题是此授权会破坏来自该表单选项卡的任何用户的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。

if(IG.form.getItemById('ADD_CH') != null)
{
    IG.form.getItemById('ADD_CH').value.subscribe(CommStat);
}

虽然没有运气。

希望有道理,

谢谢,

3 个答案:

答案 0 :(得分:0)

你可以使用jQuery检查

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

答案 1 :(得分:0)

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);
  });
 });

更优雅,但不解释破损

答案 2 :(得分:0)

感谢您的回复。今天早上我发现了以下内容。如果文本字段不存在,则简单的try和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                                                 
    }