除非控制台打开,否则JS会失败

时间:2013-11-19 01:41:17

标签: javascript jquery firefox

我真的被这个问题困扰了 我有一些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();
     }
    
{p> if_checked对于每个type都是假的,我可以验证它何时运行。

然而,没有任何反应 没有按钮被点击。
这是浏览器中普通的单线程JS 页面上没有间隔/超时功能。

我可以在最后一行之前完成任意耗时的任务(我最好的想法是它以某种方式出现并发问题,我不知道其他日志记录会如何影响任何事情)并且它没有任何效果。

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

关于如何的任何想法:

  • 日志记录可能会影响简单点击事件的结果吗?
  • 为什么这是Firefox特有的?或者在没有控制台或警报的情况下,我可能会尝试查看哪些方面出错?

编辑:哦,我还有另外两个人在他们的浏览器中复制了这个问题(再次,仅限Firefox),所以除非我们都分享它,否则它不会有一些不稳定的扩展问题。

感谢。

3 个答案:

答案 0 :(得分:0)

此行无效:

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

应该是:

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

或:

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

答案 1 :(得分:0)

以下是一些猜测:

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

看起来引号未正确配对。你是说这个吗?

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

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

答案 2 :(得分:0)

我之前遇到过这种情况。如果我在生产代码中留下任何记录,我会将其包装在试一试>抓住声明。

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

我知道有一个空的'捕获'被认为是不好的做法,但是嘿,将登录留在priduction代码上也是不好的做法。

似乎在FF(也在旧的IE中)如果控制台没有打开然后它不存在所以被捕获的错误可能就像'控制台未定义'