JavaScript ломается, когда объект не существует

У меня есть форма с разными вкладками. Одна из вкладок требует настройки авторизации, чтобы ее могли видеть только определенные пользователи.

Проблема в том, что эта авторизация нарушает 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');
});

Есть ли простой способ игнорировать любые объекты, которые не существуют? Я потратил много времени, пытаясь заставить это работать, просматривая форумы и т. Д., Но без какой-либо удачи.

Одним из предложений было проверить, существует ли объект, прежде чем прикреплять событие...

например

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

Не повезло, хотя.

Надеюсь, что это имеет смысл,

Спасибо,

3 ответа

Решение

Спасибо за ответы. Я понял это сегодня утром со следующим. Простая попытка поймать игнорирует текстовое поле, если оно не существует.

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

что более элегантно, но не объясняет поломку

Вы можете проверить с помощью jQuery

if ($('#myElement').length > 0) { 
    // it exists 
}
Другие вопросы по тегам