【问题标题】:JavaScript function not searching through arrayJavaScript函数不通过数组搜索
【发布时间】:2011-12-19 10:29:19
【问题描述】:

我用 JavaScript 编写了一些代码,它使用 window.navigator.languagenavigator.browserLanguage 对象来搜索包含这些可能值的数组。

我想要实现的是检查数组以查看其中的任何值是否与浏览器语言匹配。我知道您可以使用 PHP 并检查 HTTP 标头,但我需要在客户端执行此检查。无论如何,我已经编写了下面的代码,但由于某种原因,它似乎没有返回我想要的值。我编写函数的基础是,每次浏览器语言匹配数组中的值时,它将返回 true,否则将返回 false。但是,每次我运行该函数时,它都会返回 true!我究竟做错了什么?代码如下。

JavaScript:

var langArray = new Array("en","en-GB","en-US","fr","de","en-gb","en-us"); 

function checkforIE() {
    if (navigator.browserLanguage) { //if the navigator.browserLanguage is supported (IE only)
        for(var i=0;i<langArray.length;i++) {
            if(this[i] = navigator.browserLanguage) {
                return true;
            }
            else {
                return false;
            }
        }
    }
}

function checkforFirefox() {
    if (window.navigator.language) { //if the window.navigator.language is supported 
        for (var i=0;i<langArray.length;i++) {
            if(window.navigator.language==this[i]) {
                return true;
            }
            else {
                return false;
            }
        }
    }
}

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="test-browser.js"></script>
<title>Test Browser support</title>
</head>

<body>
<h2>Test browser support</h2>
<a href="#" onclick="checkforIE(); checkforFirefox();">Click here</a>

</body>
</html>

提前致谢。

【问题讨论】:

  • 我不确定为什么它总是返回 true,但除非我弄错了,否则这些函数只会检查第一个元素然后返回。不会检查数组中的其他元素

标签: javascript browser browser-detection


【解决方案1】:

this[i] 应该是langArray[i]。您希望 this 引用 langArray,但这是不正确的。 this 指的是window

此外,您没有对返回值做任何事情。要结合您的函数行为,请使用:

var lang = checkforIE() || checkforFirefox(); //If IE, use IE, otherwise, use FF
if(lang) alert('Language supported');

【讨论】:

    【解决方案2】:
    • 您是在分配而不是比较
    • 你应该从数组中获取,而不是从this
    • 如果全部失败,您应该只返回 false。目前,您总是在第一次迭代后返回。如果第一个元素不匹配,该函数不应直接返回 false 而是继续检查第二个元素等。

    例如:

    function checkforIE() {
        if (navigator.browserLanguage) { //if the navigator.browserLanguage is supported (IE only)
            for(var i=0;i<langArray.length;i++) {
                if(langArray[i] == navigator.browserLanguage) { // == for comparison
                                                                // and fetch from the array
                    return true;
                }
            }
        }
        return false; // only return false if all failed
    }
    

    【讨论】:

    • 啊,谢谢,这可以解释为什么值没有按预期返回!
    • 对不起,我不能接受 2 个答案,否则我也会接受!
    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2011-09-12
    • 2015-07-02
    • 2022-01-02
    • 2021-12-16
    相关资源
    最近更新 更多