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
}