JS判断元素存在/可见性控制表单重载逻辑不符合预期求助
问题逻辑错误分析与修复方案
核心错误点
- 逻辑运算符使用错误:需求是两个元素都不存在时才触发重载,原有代码使用了
||(或运算符),只要任意一个条件成立就会触发逻辑,完全和需求相反,应该换成&&(且运算符)。 - 条件1额外错误:
document.getElementById("industryQuestions.search-input")在form1中存在时会返回真值,或运算只要第一个条件为真就直接判定整体成立,所以form1也会触发重载。 - 条件2额外错误:
jQuery选择器$('#legalBusinessName')无论元素是否存在,都会返回jQuery对象(永远为真值),所以$('#legalBusinessName') == false永远不成立,整个判断等价于只有industryQuestions.search-input存在时才触发,也就是只有form1会触发。
修复代码
如果需求严格为两个元素都不存在的form2才触发重载,使用以下代码:
// 判断两个元素都不存在时才执行重载 if (!document.getElementById("industryQuestions.search-input") && !$('#legalBusinessName').length) { console.log("industry Type issue"); location.reload(); }
如果需要兼顾「元素存在但不可见」也触发重载的场景,使用以下代码:
const searchInput = document.getElementById("industryQuestions.search-input"); const legalName = $('#legalBusinessName'); // 第一个元素不存在,且第二个元素不存在/存在但不可见时触发 if (!searchInput && (!legalName.length || !legalName.is(':visible'))) { console.log("industry Type issue"); location.reload(); }
内容的提问来源于stack exchange,提问作者Abdul Haq Asif
相关产品推荐
相关产品推荐

