SCRIPT1028: Expected identifier, string or number

I'm running a plugin that displays an events calendar. It works great in all browsers except in IE compatibility mode. When that option is checked, the calendar disappears. I believe its a JS error.

IE Debugger Error:

element.qtip({
    content: {
    text: event.description,
    title: {
    text: 'Description',
    }
  },
position: {
    at: 'top right',
    adjust: {
    x: 0, y: 30
   },
},

In my plugin editor this is the code:

element.qtip({
  content: {
  text: event.description,
  title: {
  text: '<?php _e('Description', 'event_espresso'); ?>',
  }
},
position: {
   at: 'top right',
   adjust: {
   x: 0, y: 30
  },
},

I'm not great at debugging so any help would be appreciated.

If it helps, here is the page: http://www.mbausa.org/calendar/

Answers:

Answer

Internet Explorer have troubles with trailing commas in objects and arrays;

title: {
    text: 'Description', //<--
}

You probably want:

title: {
    text: 'Description'
}
Answer

There are 2 common causes for this error. Either having a trailing comma when inappropriate, or using a JavaScript reserved word. In your case, you have 2 unnecessary commas. Below is the correct code snippet, with comments where I removed the commas.

element.qtip({
  content: {
  text: event.description,
  title: {
    text: '<?php _e('Description', 'event_espresso'); ?>' // Removed Comma
  }
},
position: {
  at: 'top right',
  adjust: {
    x: 0, y: 30
  } // Removed Comma
},

I actually did a blog post (and video) explaining the error and showing examples and fixes. It can be found here: http://mikemclin.net/fixing-error-script1028-expected-identifier-string-or-number/

Answer

Old version of IE doesn't support mal-formated JSON String.

You should never put a comma ',' separator when no braces '[', accolades '{' or new object properties come after.

Try :

position: {
at: 'top right',
adjust: {
   x: 0, y: 30
  } // <-- no comma here
},

instead of :

position: {
at: 'top right',
adjust: {
   x: 0, y: 30
  }, // <-- comma here
},
Answer

If you are using Vuex and the issue manifests at the computed hook calling mapState, then the issue is with the spread operator.

},
computed: {
  ...mapState({

Use babel to fix it: https://babeljs.io/docs/en/babel-plugin-proposal-object-rest-spread

Answer

Rather than work round compatibility mode you can force non-compatibility mode with...

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />

in your <head> tag.

Answer

Another possible error is due to the reserved keyword being used as hash key.

IE8 errors when defining a Javascript object?

When I use {class:'icon'} I would also get this error. Other IE8 keywords would probably do the same too.

Answer

You can't use class as a property name in an object literal without quoting it.

"class": 'pullup'

should work. In one of his essays (or whatever they are) Crockford explains that this restriction is not necessary for syntactic disambiguation, but the rule's there anyway.

Answer

I got this error when trying to import a ES6 module without transpilation through Babel or similar tools.

This row generated the error:

import myES6module from 'my-npm-ES6-module'

The solution is to make sure your workflow actually transpiles it to browser-compatible JavaScript.

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.