我真的被这个问题困扰了 我有一些JavaScript来控制产品配置器 一小段代码选择一些默认值
但是,如果我做任何事情来观察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();
}
if_checked
对于每个type
都是假的,我可以验证它何时运行。
然而,没有任何反应
没有按钮被点击。
这是浏览器中普通的单线程JS
页面上没有间隔/超时功能。
我可以在最后一行之前完成任意耗时的任务(我最好的想法是它以某种方式出现并发问题,我不知道其他日志记录会如何影响任何事情)并且它没有任何效果。
我可以运行相同的选择器并将其放在一个字符串中,或者除了记录或警告之外,还可以做任何你能想到的事情,它不会工作;没有按钮被点击。只有积极地观察发生的事情才能使代码工作。整个交易相当复杂,我无法提供整个事情。
关于如何的任何想法:
编辑:哦,我还有另外两个人在他们的浏览器中复制了这个问题(再次,仅限Firefox),所以除非我们都分享它,否则它不会有一些不稳定的扩展问题。
感谢。
答案 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中)如果控制台没有打开然后它不存在所以被捕获的错误可能就像'控制台未定义'