开发者

jQuery $.inArray returns -1 when it should be 0

开发者 https://www.devze.com 2023-03-28 07:10 出处:网络
Hell All, I have an odd problem: //dataText hold current language data that\'s gathered from another function

Hell All,

I have an odd problem:

//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($.inArr开发者_运维技巧ay(_lang.data_uploads, dataText)); // 0

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

I shortened the code but it should give a general idea of what I'm trying to achieve.

I know it seems weird why I would be using the same data in two arrays but the data_fre and data_eng have language specific dataText info plus other language specific data as well. dataText will have non-specific language data which is why I'm testing it agains data_fre or data_eng to find which language to use.

I can't figure out why it would return -1 because I have other languages set (with special character too like Russian text) and they all return 0.

Appreciate the help :)


-1 means false. 0 means 'at position 0'. Without knowing more about the data coming in, I expect it is working properly.


Strings do not match numbers.

Simple Test

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


Ok I figured out what it was.

I used $.trim() in the function that collects data for dataText. Since I couldn't see any leading or trailing spaces when I would alert() it was confusing me why it wouldn't work.

This explains why $.inArray() wouldn't match "Envois de données" with "Envois de données ".

Thanks again everybody for taking a look :)

0

精彩评论

暂无评论...
验证码 换一张
取 消