jQuery 函数 "Expected identifier, string or number" 上的 IE8 错误

IE8 error on jQuery function "Expected identifier, string or number"

我正在努力解决这个问题,但没有看到导致错误的原因,我有以下函数仅在 ie8 中出错,因此也破坏了所有 jQuery 功能与其他 JavaScript 位一样。 (函数位于 app.js 文件内)

function visitorAges(category, number) {
    // Ages for adults
    if (category == 'adult') {
        var arrayAges = ['18 - 20', '21 - 30', '31 - 40', '41 - 50', '51 - 60', '60 +'];
    }
    // Ages for children
    else if (category == 'child') {
        var arrayAges = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];
    }
    // Populate related select menu with options    
    $('#visit_'+category+'_ages').empty();
        for (var i=1; i<=number; i++ ) {
            var $ageLabel = $('<label/>', {for: 'visit_'+category+'-'+i+'_age', text: category+' '+i});
            var $ageSelect = $('<select/>', {name: 'visit_'+category+'-'+i+'_age', id: 'visit_'+category+'-'+i+'_age', class: 'form-control'});
            $.each(arrayAges, function(index, value){
            $ageSelect.append($('<option/>', {text: value}));
            })
            $('#visit_'+category+'_ages').append($ageLabel, $ageSelect).fadeIn();
    }
} /* END visitorAges() */

我在IE8控制台中得到的错误如下:

Expected identifier, string or number 'app.js, line 99 character 35'

var arrayAges = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17];

Expected identifier, string or number 'app.js, line 104 character 35'

var $ageLabel = $('<label/>', {for: 'visit_'+category+'-'+i+'_age', text: category+' '+i});

所以,正如我在评论中所说,IE要求关键字在不用作关键字时用引号引起来,例如下面的那个。注意关键字 class 等

var $ageLabel = $('<label/>', {for: 'visit_'+category+'-'+i+'_age', text: category+' '+i});
var $ageSelect = $('<select/>', {name: 'visit_'+category+'-'+i+'_age', id: 'visit_'+category+'-'+i+'_age', class: 'form-control'});

所以,我们需要做的就是像下面这样包装它们,这在所有浏览器中都适用。

var $ageLabel = $('<label/>', {'for': 'visit_'+category+'-'+i+'_age', 'text': category+' '+i});
var $ageSelect = $('<select/>', {'name': 'visit_'+category+'-'+i+'_age', 'id': 'visit_'+category+'-'+i+'_age', 'class': 'form-control'});

P.S。为了保持一致,我包装了所有密钥。

嗯,我想你的数组中需要 String,而不是 Number:

var arrayAges = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17'];

此外,您应该(不是必需但首选)在条件之前声明一次您的 var arrayAges 并在您的 if/else.

中影响它