我有一个包含不同标签的表单。其中一个选项卡需要设置授权,以便只有特定用户才能看到它。
问题是此授权会破坏来自该表单选项卡的任何用户的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);
}
虽然没有运气。
希望有道理,
谢谢,
答案 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
}