比较变量与不工作的数组元素[Javascript]

时间:2014-03-05 01:52:26

标签: javascript arrays

刚接触javascript我遇到了一个奇怪的问题。我有一个元素数组和一个变量,我想将该变量与所有数组元素进行比较,并在它们匹配时执行某些操作。

以下是代码片段:

for (var i=0; i<country_arr.length; i++) {

    option_str.options[option_str.length] = new Option(country_arr[i],country_arr[i]);

    if(selected_country == country_arr[i]){
        option_str.options[i].selected = true;
    }
}

数组本身是一个字符串数组:

var country_arr = new Array("Republic of Ireland", "Northern Ireland");

无论出于何种原因,这不会进入if语句,但奇怪的是当我替换时:

if(selected_country == country_arr[i]) 

使用:

if(selected_country == "Republic of Ireland") 

......它确实完美。

我是否错误地比较了这两个元素?任何帮助将不胜感激。

更新 - 完整的.js文件:

完整外部.js文件:

//Create a new array, to contain the list of countries available.
var country_arr = new Array("Republic of Ireland", "Northern Ireland");
//Create a new array to hold a list of counties depending on country selection.
var s_a = new Array();
s_a[0]="";
s_a[1]="Carlow|Cavan|Clare|Cork|Donegal|Dublin|Galway|Kerry|Kildare|Kilkenny|Laois|Leitrim|Limerick|Longford|Louth|Mayo|Meath|Monaghan|Offaly|Roscommon|Sligo|Tipperary|Waterford|Westmeath|Wexford|Wicklow";
s_a[2]="Antrim|Armagh|Down|Dungannon|Derry|Tyrone";

function print_country(country_id, selected_country){
    //Given the id of the <select> tag as function argument, it inserts <option> tags
    var option_str = document.getElementById(country_id);
    option_str.length=0;
    option_str.options[0] = new Option('Select Country','');
    option_str.selectedIndex = 0;
    for (var i=0; i<country_arr.length; i++) {
        option_str.options[option_str.length] = new     Option(country_arr[i],country_arr[i]);

        if(selected_country == country_arr[i]){
            option_str.options[i].selected = true;
            print_county('county',i);
        }
    }
}

function print_county(state_id, state_index){
    var option_str = document.getElementById(state_id);
    option_str.length=0;    // Fixed by Julian Woods
    option_str.options[0] = new Option('Select County','');
    option_str.selectedIndex = 0;
    var state_arr = s_a[state_index].split("|");

    for (var i=0; i<state_arr.length; i++) {
        option_str.options[option_str.length] = new Option(state_arr[i],state_arr[i]);
    }
}

调用该函数,并使用以下命令通过php文件设置变量selected_country:

<script language="javascript">
    var selected = <?php echo json_encode($g_country); ?>;
    print_country("country", selected);
</script>

1 个答案:

答案 0 :(得分:1)

问题不在于if声明,而在其他地方有错误。 是错的:

option_str.options[option_str.length] = ...

option_str.length可能不是你的意思。尝试:

option_str.options[option_str.options.length] = ...

......或者更好:

option_str.options.push(new Option(...));

Here's a working example.