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