0

大家好,我有一个在 Chrome 和 FF 中运行良好的脚本,但在 IE 中似乎无法运行......虽然它有一个 java 脚本错误并且我无法解决它,但错误是

未捕获的类型错误:对象函数 (){var b=this;var d=[];for(var a=b.length;a--;){var c=b[a];if(jQuery.inArray(c, d)===-1)d.unshift(c)}return d} 没有方法'split'

请帮忙

    function populate(s1,s2){
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    if(s1.value == "bedroom"){
        var optionArray = ["|Room Type","private|Private","shared|Shared","suite|Suite"];
    } else if(s1.value == "house"){
        var optionArray = ["|House Type","beach_house|Beach House","bungalow|Bungalow","cabin|Cabin","chateau|Chateau","house|House","cottage|Cottage","lake_house|Lake House","ski_chalet|Ski Chalet","townhosue|Townhouse","villa|Villa"];
    } else if(s1.value == "apartment"){
        var optionArray = ["|Appartment Type","apartment|Apartment","apartment_hotel|Apartment Hotel","condo|Condo","loft|Loft","luxury_apartment|Luxury Apartment","serviced_aparment|Serviced Apartment"];
    } else if(s1.value == "bnb"){
        var optionArray = ["|B&B Type","room|Room","suite|Suite"];
    } else if(s1.value == "hotel"){
        var optionArray = ["|Hotel Type","boutique_hotel|Boutique Hotel","budget_hotel|Budget Hotel","hotel|Hotel","inn|Inn","resort|Resort"];
    } else if(s1.value == "hostel"){
        var optionArray = ["|Hostel Type","hostel|Hostel"];
    }
    for(var option in optionArray){
        var pair = optionArray[option].split("|");
        var newOption = document.createElement("option");
        newOption.value = pair[0];
        newOption.innerHTML = pair[1];
        s2.options.add(newOption);
    }
}
4

2 回答 2

0

看起来您正在使用一些将属性添加到数组原型的扩展,因此 IE 对其他浏览器没有的附加值进行操作。直接的解决方法是不要for..in在您的数组上使用,而是使用普通的for

for(var i = 0; i < optionArray.length; ++i) {
    // and now use optionArray[i] instead of optionArray[option]
}

另一种选择是过滤掉这些属性

for(var option in optionArray){
    if (!optionArray.hasOwnProperty(option)) continue;
    // the rest without modification
}
于 2013-09-10T10:27:06.990 回答
0

optionArray在 if 和 else if 中定义 var,但不是在泛型 else 中,因此在某些情况下optionArray可以未定义。

您可以将定义移到 if 的顶部,或者定义一个通用的 else。

代码:

function populate(s1,s2){
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    s2.innerHTML = "";
    var optionArray=new Array();
    if(s1.value == "bedroom"){
        optionArray = ["|Room Type","private|Private","shared|Shared","suite|Suite"];
    } else if(s1.value == "house"){
        optionArray = ["|House Type","beach_house|Beach House","bungalow|Bungalow","cabin|Cabin","chateau|Chateau","house|House","cottage|Cottage","lake_house|Lake House","ski_chalet|Ski Chalet","townhosue|Townhouse","villa|Villa"];
    } else if(s1.value == "apartment"){
        optionArray = ["|Appartment Type","apartment|Apartment","apartment_hotel|Apartment Hotel","condo|Condo","loft|Loft","luxury_apartment|Luxury Apartment","serviced_aparment|Serviced Apartment"];
    } else if(s1.value == "bnb"){
        optionArray = ["|B&B Type","room|Room","suite|Suite"];
    } else if(s1.value == "hotel"){
        optionArray = ["|Hotel Type","boutique_hotel|Boutique Hotel","budget_hotel|Budget Hotel","hotel|Hotel","inn|Inn","resort|Resort"];
    } else if(s1.value == "hostel"){
        optionArray = ["|Hostel Type","hostel|Hostel"];
    }
    for(var option in optionArray){
        var pair = optionArray[option].split("|");
        var newOption = document.createElement("option");
        newOption.value = pair[0];
        newOption.innerHTML = pair[1];
        s2.options.add(newOption);
    }
}
于 2013-09-10T10:35:56.800 回答