为什么我的JavaScript函数总是返回false?

时间:2015-08-06 13:17:28

标签: javascript

我正在尝试将代码添加到我的应用程序中。

var seachHttp = function () {
                var cssSheets = document.styleSheets, // Loaded CSS Sheets
                    i =0, il = cssSheets.length, // Counter and limit for sheets
                    j, jl, rules, rule, // Counter and vars for Rules inside a Sheet
                    stylesToSearch = [ // Properties to Seach HTTP ON
                        'background',
                        'background-image',
                    ],
                    k, kl=stylesToSearch.length, // Counter for properties
                    s, // Current Property
                    v // Current Value;
                for(;i<il;i++) { // Loop Sheets
                    rules = cssSheets[i].rules || cssSheets[i].cssRules;
                    for(j=0,jl=rules.length;j<jl;j++) { // Loop Rules
                        rule = rules[j];
                        for(k=0;k<kl;k++){ // Loop Styles
                            s = stylesToSearch[k]; 
                            v = rule.style[s]; // Get Value from Current Style
                            if (  v !== undefined && v.toString().toLowerCase().indexOf("http") > -1 ) { // Seach for HTTP Content
                                //alert("Found HTTP at " + rule.selectorText + " " + s + " = " + rule.style[s]);
                                return true;
                            } else {
                                return false;
                            }
                        }
                    }
                }
            }

问题是,为什么上面的代码总是返回false,尽管它应该返回true?

然后我使用条件来检查结果是真还是假。

这是我用来测试真假的条件:

if (div_array.length > 0 || seachHttp() == true) {

这可能会改善吗?

3 个答案:

答案 0 :(得分:2)

该函数有效地测试了第一个样式表的第一个选择器的第一个规则 ONLY

如果您返回false,则不返回false

在函数结束时返回false

答案 1 :(得分:2)

因为只要您点击的规则值与您的真实条件不符,就会返回false。基本上,只要您点击不包含“http”的背景或背景图像规则,即使后来的规则符合您的条件,您的函数也会返回false。

尝试在循环后返回false值,并且只有在符合条件时才返回true。见下文的修正案。

var seachHttp = function () {
                var cssSheets = document.styleSheets, // Loaded CSS Sheets
                    i =0, il = cssSheets.length, // Counter and limit for sheets
                    j, jl, rules, rule, // Counter and vars for Rules inside a Sheet
                    stylesToSearch = [ // Properties to Seach HTTP ON
                        'background',
                        'background-image',
                    ],
                    k, kl=stylesToSearch.length, // Counter for properties
                    s, // Current Property
                    v;  // Current Value
                for(;i<il;i++) { // Loop Sheets
                    rules = cssSheets[i].rules || cssSheets[i].cssRules;
                    for(j=0,jl=rules.length;j<jl;j++) { // Loop Rules
                        rule = rules[j];
                        for(k=0;k<kl;k++){ // Loop Styles
                            s = stylesToSearch[k]; 
                            v = rule.style[s]; // Get Value from Current Style
                            if (  v !== undefined && v.toString().toLowerCase().indexOf("http") > -1 ) { // Seach for HTTP Content
                                //alert("Found HTTP at " + rule.selectorText + " " + s + " = " + rule.style[s]);
                                return true;
                            }
                        }
                    }
                }
                return false;
            }

答案 2 :(得分:1)

你有if () return true; else return false;。这意味着您只能访问所有for循环中的第一个条目并从中返回。在for循环之后你可能想要return false