7

I'm currently trying hard to get my jQuery to work in IE7, when I Lint the following:

$(".regflow").validate({
    errorLabelContainer: $("#error-message"),
    rules: {
        txtTextOnly: {required: true,textOnly: true},
        txtNumbersOnly: {required: true,numbersOnly: true},
        txtPhoneOnly: {required: true,phoneOnly: true},
        txtAreaCodeOnly: {required: true,numbersOnly: true},
        txtSimCodeOnly: {required: true,simCodeOnly: true},
        txtCprOnly1: {required: true,numbersOnly: true},
        txtCprOnly2: {required: true,cprOnly1: true},
        txtMailOnly: {required: true,mailOnly: true}
    },

    messages: {
        txtTextOnly: {required: "Dette felt skal udfyldes"},
        txtNumbersOnly: {required: "Dette felt skal udfyldes"},
        txtPhoneOnly: {required: "Dette felt skal udfyldes"},
        txtAreaCodeOnly: {required: "Dette felt skal udfyldes"},
        txtSimCodeOnly: {required: "Dette felt skal udfyldes"},
        txtCprOnly1: {required: "Dette felt skal udfyldes"},
        txtCprOnly2: {required: "Dette felt skal udfyldes"},
        txtMailOnly: {required: "Dette felt skal udfyldes"}
    },
});

... I get this error from Lint: "warning: trailing comma is not legal in ECMA-262 object initializers"

Does anyone know what this means, and how do I fix it?

timkl
  • 3,299
  • 12
  • 57
  • 71
  • Firefox will parse the code fine with or without the trailing comma, which is misleading. Internet Explorer 7/8 (and probably below) does not. – Pekka Nov 30 '09 at 13:34
  • This is one case when IE keeps to the standard but Firebox does not! – Ian Ringrose Nov 30 '09 at 13:50
  • 1
    Firefox would give you a strict warning, but that will no longer happen in Firefox 3.6 since this is allowed behavior in ES5. – sdwilsh Nov 30 '09 at 20:11

5 Answers5

11

Remove the trailing comma - the comma at the end of the following part:

 messages: {
        txtTextOnly: {required: "Dette felt skal udfyldes"},
        txtNumbersOnly: {required: "Dette felt skal udfyldes"},
        txtPhoneOnly: {required: "Dette felt skal udfyldes"},
        txtAreaCodeOnly: {required: "Dette felt skal udfyldes"},
        txtSimCodeOnly: {required: "Dette felt skal udfyldes"},
        txtCprOnly1: {required: "Dette felt skal udfyldes"},
        txtCprOnly2: {required: "Dette felt skal udfyldes"},
        txtMailOnly: {required: "Dette felt skal udfyldes"}
    },

While creating an object {} or an array [], you separate individual elements with a comma. But here there is an additional comma after the last item like [a, b, c,] - that is not allowed as per ECMA-262.

Amarghosh
  • 58,710
  • 11
  • 92
  • 121
  • Firefox would actually give you a strict warning about this, but note that this behavior has changed in ES5. See https://bugzilla.mozilla.org/show_bug.cgi?id=508637 for more details. – sdwilsh Nov 30 '09 at 20:10
6

The extra comma near the bottom:

$(".regflow").validate({
    errorLabelContainer: $("#error-message"),
    rules: {
        txtTextOnly: {required: true,textOnly: true},
        txtNumbersOnly: {required: true,numbersOnly: true},
        txtPhoneOnly: {required: true,phoneOnly: true},
        txtAreaCodeOnly: {required: true,numbersOnly: true},
        txtSimCodeOnly: {required: true,simCodeOnly: true},
        txtCprOnly1: {required: true,numbersOnly: true},
        txtCprOnly2: {required: true,cprOnly1: true},
        txtMailOnly: {required: true,mailOnly: true}
    },

    messages: {
        txtTextOnly: {required: "Dette felt skal udfyldes"},
        txtNumbersOnly: {required: "Dette felt skal udfyldes"},
        txtPhoneOnly: {required: "Dette felt skal udfyldes"},
        txtAreaCodeOnly: {required: "Dette felt skal udfyldes"},
        txtSimCodeOnly: {required: "Dette felt skal udfyldes"},
        txtCprOnly1: {required: "Dette felt skal udfyldes"},
        txtCprOnly2: {required: "Dette felt skal udfyldes"},
        txtMailOnly: {required: "Dette felt skal udfyldes"}
    }, //<--- this one!!!!
});
o.k.w
  • 25,490
  • 6
  • 66
  • 63
3

Is it not talking about:

    }, // This comma here?
}); 

on the second to last line?

Iain
  • 2,500
  • 1
  • 20
  • 24
2

Remove the last comma from the second last line:

$(".regflow").validate({
    errorLabelContainer: $("#error-message"),
    rules: {
        txtTextOnly: {required: true,textOnly: true},
        txtNumbersOnly: {required: true,numbersOnly: true},
        txtPhoneOnly: {required: true,phoneOnly: true},
        txtAreaCodeOnly: {required: true,numbersOnly: true},
        txtSimCodeOnly: {required: true,simCodeOnly: true},
        txtCprOnly1: {required: true,numbersOnly: true},
        txtCprOnly2: {required: true,cprOnly1: true},
        txtMailOnly: {required: true,mailOnly: true}
    },

    messages: {
        txtTextOnly: {required: "Dette felt skal udfyldes"},
        txtNumbersOnly: {required: "Dette felt skal udfyldes"},
        txtPhoneOnly: {required: "Dette felt skal udfyldes"},
        txtAreaCodeOnly: {required: "Dette felt skal udfyldes"},
        txtSimCodeOnly: {required: "Dette felt skal udfyldes"},
        txtCprOnly1: {required: "Dette felt skal udfyldes"},
        txtCprOnly2: {required: "Dette felt skal udfyldes"},
        txtMailOnly: {required: "Dette felt skal udfyldes"}
    }
});
Jerome
  • 8,427
  • 2
  • 32
  • 41
0

I know this was asked a while ago, but this might be helpful. If you run your JavaScript through JSLint it will tell you if there are any of these "extra commas."

James Kingsbery
  • 7,298
  • 2
  • 38
  • 67