2011-11-01 2 views
1

Я написал немного кода в JavaScript, который использует объекты window.navigator.language и navigator.browserLanguage для поиска по массиву, который содержит эти возможные значения.Функция JavaScript, не выполняющая поиск по массиву

То, что я пытаюсь достичь, - проверить массив, чтобы увидеть, соответствует ли какое-либо из значений внутри него языку браузера. Я знаю, что вы можете использовать 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> 

Спасибо заранее.

+0

им не уверен, почему он всегда возвращает истину, но если im mistaken эти функции будут проверять только первый элемент и затем возвращаться. Остальные элементы в массиве не будут проверены. –

ответ

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'); 
+0

Удивительный я вижу свою ошибку - спасибо. – zik

1
  • Вы назначая вместо сравнения
  • Вы должны извлечь из массива, а не от this
  • Вы должны возвращать только ложь, если все потерпели неудачу. В настоящее время вы всегда возвращаетесь после первой итерации. Если первый элемент не соответствует функции не должен непосредственно возвращать ложным, но продолжить проверку для второго элемента и т.д.

Например:

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 
} 
+0

Ах спасибо, это может объяснить, почему значения не возвращаются, как ожидалось! – zik

+0

Извините, я не могу принять 2 ответа, иначе я тоже согласился бы с этим! – zik

Смежные вопросы