jQuery $ .inArray应为0时返回-1

时间:2011-08-12 20:23:17

标签: javascript jquery arrays

地狱全部,

我有一个奇怪的问题:

//dataText hold current language data that's gathered from another function
//pick one to test it out
//if english data gathered
var dataText = ["Data uploads"];
//if french data gathered
var dataText = ["Envois de données"];

function lang_lib(lang) {   
    var data_fre = [13, 'Envois de données'];
    var data_eng = [14, 'Data uploads'];
    var data_lang, rep_lang;

    switch(lang) {
        case "English":
            data_lang = data_eng;
            data_rep = rep_eng;
            break;
        case "Français":
            data_lang = data_fre;
            data_rep = rep_fre;
            break;
        default:
            $('table.infobox tbody').append('<tr><td id="lang-fail"><ul class="first last"><li>User language is not available</li></ul></td></tr>');
    };

    this.data_uploads = data_lang[1];
}
_lang = new lang_lib($('#toplinks-language').text());

//if lang_lib("English")
alert($.inArray(_lang.data_uploads, dataText)); // 0

//if lang_lib("Français")
alert($.inArray(_lang.data_uploads, dataText)); // -1

我缩短了代码,但它应该大致了解我想要实现的目标。

我知道为什么我会在两个数组中使用相同的数据,但data_fre和data_eng具有特定于语言的dataText信息以及其他语言特定数据,这似乎很奇怪。 dataText将具有非特定语言数据,这就是为什么我再次测试data_fre或data_eng以查找要使用的语言。

我无法弄清楚为什么它会返回-1因为我设置了其他语言(特殊字符也像俄语文本一样)并且它们都返回0。

感谢帮助:)

3 个答案:

答案 0 :(得分:2)

-1表示错误。 0表示'在位置0'。如果不了解有关数据的更多信息,我希望它能正常运行。

答案 1 :(得分:1)

字符串与数字不匹配。

简单测试

var arr = [13, 'Envois de données'];    
console.log($.inArray(13,arr));    // 0 - matches as a number
console.log($.inArray("13",arr));  // -1 - matches as a string

答案 2 :(得分:0)

好的,我发现它是什么。

我在收集dataText数据的函数中使用了$.trim()。因为我alert()时无法看到任何前导或尾随空格,所以它让我感到困惑,为什么它不起作用。

这解释了为什么$.inArray()与“Envoisdedonnées”不符合“Envoisdedonnées”。

再次感谢大家看一看:)