Prototype.js Element.update() 在 IE9 上抛出错误

发布于 2024-12-11 10:10:30 字数 594 浏览 0 评论 0原文

我的代码如下所示:

var node = parent.insertRow(before);
node = $(node);
node.update('<td>Hello</td><td>Hello</td><td>Hello</td>');

它适用于 IE6、IE7、IE8、Chrome、Firefox、Safari(Mac 和 Windows),但不适用于 IE9。

IE9 抛出“DOM 异常:INVALID_CHARACTER_ERR (5)”并在prototype.js 的中间指向 e.setAttribute(c,f)。我使用的监视窗口将 c 显示为“{}”,这对我来说没有任何意义。

我正在使用 Scriptaculous 1.9.0,其中包括 Prototype 1.7,所有研究都表明它与 IE9 兼容。

我知道 IE 对表格有特殊要求,这就是我使用的原因 元素#update

我做错了什么?

My code looks like:

var node = parent.insertRow(before);
node = $(node);
node.update('<td>Hello</td><td>Hello</td><td>Hello</td>');

It works on IE6, IE7, IE8, Chrome, Firefox, Safari (both Mac and Windows) but not IE9.

IE9 throws a "DOM Exception: INVALID_CHARACTER_ERR (5)" and points in the middle of prototype.js to e.setAttribute(c,f). I used the watch window which shows c as "{}" which doesn't make any sense to me.

I'm using Scriptaculous 1.9.0 which includes Prototype 1.7 which all research shows as IE9 compatible.

I know that IE has special requirements for tables which is why I use
a Element#update.

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

计㈡愣 2024-12-18 10:10:30

如果将方法添加到 Object.prototype,则可能需要使用 DefineProperty 使其不可枚举,以便 Element#update 能够在 IE9 上工作。当代码修改 Object.prototype 时,Element#update 很脆弱。

就我而言,一个库做了这样的事情:

Object.prototype.aFunc = function () {
    return doStuff();
};

我对 IE9 进行了特殊处理,如下所示:

if (navigator.userAgent.indexOf("Trident/5") > -1) {
   Object.defineProperty(Object.prototype, 'aFunc', {
      value : function () {
         return doStuff();
      },
      enumerable : false
   });
} else {
    Object.prototype.aFunc = function () {
        return doStuff();
    };
}

If methods are added to Object.prototype, they may need to be made unenumerable using defineProperty for Element#update to work on IE9. Element#update is brittle when code modifies Object.prototype.

In my case, a library did something like this:

Object.prototype.aFunc = function () {
    return doStuff();
};

I special-cased IE9 to fix it like this:

if (navigator.userAgent.indexOf("Trident/5") > -1) {
   Object.defineProperty(Object.prototype, 'aFunc', {
      value : function () {
         return doStuff();
      },
      enumerable : false
   });
} else {
    Object.prototype.aFunc = function () {
        return doStuff();
    };
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文