Функция JavaScript не ищет в массиве - PullRequest
1 голос
/ 01 ноября 2011

Я написал немного кода на JavaScript, который использует объекты window.navigator.language и navigator.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>

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011
  • Вы назначаете вместо сравнения
  • Вы должны извлекать данные из массива, а не из 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
}
1 голос
/ 01 ноября 2011

this[i] должно быть langArray[i].Вы ожидаете, что this будет ссылаться на langArray, но это не правильно.this относится к window.

Кроме того, вы ничего не делаете с возвращаемыми значениями.Чтобы объединить поведение вашей функции, используйте:

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