javascript – IE8在使用prototype.js时出错“无效参数”,如何找到错误的位置?

我有一个相当复杂的 Javascript,在Google Chrome,Firefox,Safari和Opera中没有任何错误,可以完美运行.但是,由于往往总是令人讨厌的情况,它在Internet Explorer中完全失败.我已经在IE7和IE8中测试过并得到了同样的错误:

Invalid argument. prototype.js,line
2216,character 9

我正在使用通过Google托管的Prototype 1.6.1.给出的错误不是很有帮助,因为它没有告诉我在实际代码中发生错误的位置.错误中提到的行是以下代码中底部的第6行:

setStyle: function(element,styles) {
    element = $(element);
    var elementStyle = element.style,match;
    if (Object.isString(styles)) {
      element.style.cssText += ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
    }
    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property]);
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
            property] = styles[property];

    return element;
  },

因为它在setStyle代码块中,所以我假设当我为某个元素设置样式属性时会发生错误.但是,我在这个脚本中调用了setStyle超过100次,并且一直试图弄清楚错误发生在几个小时的确切位置.我能做些什么来帮助自己找到发生错误的地方吗?

解决方法

明确尝试…抓住代码:

for (var property in styles) {
  try {
    if (property == 'opacity') element.setOpacity(styles[property]);
    else
      elementStyle[(property == 'float' || property == 'cssFloat') ?
        (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
          property] = styles[property];
  }
  catch (_) {
    throw "Error setting property '" + property + "' to value '" + styles[property] + "'";
  }
}

然后你就会确切地知道导致问题的属性和价值.

相关文章

kindeditor4.x代码高亮功能默认使用的是prettify插件,prett...
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小