JS失败,除非控制台打开

JS fails unless the console is open

本文关键字:控制台 失败 JS      更新时间:2023-09-26

我真的被这个问题难住了
我有一些JavaScript来控制产品配置程序
选择一些默认的简单代码

  • 适用于Chrome
  • 在IE中运行良好
  • 在Firefox中不起作用(所有内容的最新版本)

然而,如果我做任何事情来观察FF中的代码,它工作得很好

  • 如果我让它提醒任何相关的事情,它就会起作用
  • 如果我记录任何相关的内容,它就会工作,但前提是控制台实际上是打开的,这样我才能看到日志。如果控制台未打开,则无法工作。

     for(type in radio_groups) {
         if_checked = !!$(":radio[name="+type+"]:checked").length;
         console.log($('.'+type).not('[class*="unavailable"]')); 
         //This loop doesnt do anything without this log above
         alert($('.'+type).not('[class*="unavailable"]')); 
         // Or this alert.
         var t = $('.'+type).not('[class*="unavailable"]'); 
         // Line above doesn't make stuff work.
         if(!if_checked)
             $('.'+type).not('[class*="unavailable"]').first().click();
     }
    

对于每个typeif_checked都是false,我可以在它运行时验证这一点。

然而,什么也没发生
没有单击任何按钮
这是浏览器中的纯单线程JS
页面上没有间隔/超时功能。

我可以在最后一行之前完成任意耗时的任务(我的最佳想法是,不知何故,这是一个并发问题,我看不出日志记录会对任何事情产生什么影响),而且它没有任何影响。

我可以运行相同的选择器并将其放入字符串中,或者除了日志记录或警报之外,对它做任何你能想到的事情,但它不会工作;没有按钮被点击。只有积极观察发生的事情,代码才能工作。整个交易相当复杂,我无法提供全部内容。

关于如何:

  • 日志记录是否可能影响简单点击事件的结果
  • 为什么这是Firefox特有的?或者我可能会尝试其他方法,在没有控制台或警报的情况下看看出了什么问题

编辑:哦,我已经让另外两个人在他们的浏览器中复制了这个问题(同样,只有Firefox),所以除非我们都分享它,否则这不是一些不稳定的扩展问题。

谢谢。

此行无效:

var t = "$('.'+type).not('[class*="unavailable"]')";

可能应该是:

var t = "$('.'+type).not('[class*='"unavailable'"]')";

或:

var t = $('.'+type).not('[class*="unavailable"]');

这里有一些猜测:

if_checked = !!$(":radio[name="+type+"]:checked").length;

看起来引号没有正确配对。你是这个意思吗?

if_checked = !!$(":radio[name='"+type+"']:checked").length;

(请参阅包裹type值的单引号?)

我以前遇到过这种情况。如果在生产代码中保留任何日志记录,我会将其封装在try>catch语句中。

try {
    console.log("my log message")
 } catch (err) { };

我知道有一个空的"catch"被认为是不好的做法,但嘿,把登录留在生产代码上也是不好的。

在FF中(也在旧的IE中),如果控制台没有打开,那么它就不存在,因此捕获的错误可能类似于"控制台未定义"