微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript:看似有效的代码导致未捕获错误:NOT_SUPPORTED_ERR:第3行的DOM异常9

var returned = values.make(function (value,index) {
    return items[index].value = value;
});

我有上面的代码片段.

值是要分配给不同元素的值数组.

Make本质上相当于array.prototype.map.

Array.prototype.make = function (loop,playground) {
    var loop = loop || function (value) { return value },playground = playground || this;

    if (loop.Type !== "Function") throw "Loop [0] is not a function.";

    var returned = [];
    for (var i = 0; i < this.length; i++)
        returned[i] = loop.apply(playground,[this[i],i,this]);

    return returned;
};

另外,我有Function.prototype.Type =“Function”;在同一个文件中,所以它不是.Type抛出错误. .Type完美无缺.

与Function一起,这些也有.Type的.

Object.prototype.Type = "Object";
Array.prototype.Type = "Array";
RegExp.prototype.Type = "RegExp";
String.prototype.Type = "String";
Number.prototype.Type = "Number";
Boolean.prototype.Type = "Boolean";
XMLHttpRequest.prototype.Type = "XMLHttpRequest";
Date.prototype.Type = "Date";

Items是不同元素的数组.

[

我一直收到这个错误.

Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9 on line 3

我得到了这个错误,它没有任何意义,因为该行上没有任何代码.

我完全失去了.

有没有人注意到该代码有什么问题?

更新:我不知道发生了什么,但我修好了.

由于没有人给出正确的答案,我只会把它交给唯一尝试过的人.

拍手拍手*

最佳答案
你能发布一个重现这个错误的小例子吗?

除此之外,您的Javascript中存在一些错误

在这里添加一个分号:

var loop = loop || function (value) { return value; },playground = playground || this;

虽然没有必要使用分号,但我喜欢使用分号,否则你可能被微妙的错误所困扰.

并且,您需要使用typeof not .Type:

if (typeof loop !== "function") throw "Loop [0] is not a function.";

此外,如果items只是一个字符串数组,那么items [index] .value没有意义,因为字符串没有value属性.这部分对我来说特别可疑.虽然我没有得到你离开那一点时所做的同样的错误,但我认为值得仔细研究.

您提到您正在使用第三方库,因此有关typeof的部分无关紧要.您还提到您在数组中使用实际的输入元素,因此第二部分也无关紧要.

我再次尝试了你的代码,这次用document.createElement创建输入元素:

Array.prototype.make = function (loop,playground) {
    var loop = loop || function (value) { return value; },playground = playground || this;

    if (typeof loop !== "function") throw "Loop [0] is not a function.";

    var returned = [];
    for (var i = 0; i < this.length; i++)
        returned[i] = loop.apply(playground,this]);

    return returned;
};

var items = [];
items.push(document.createElement("INPUT"));
items.push(document.createElement("INPUT"));
items.push(document.createElement("INPUT"));

var values = [4,5,6];

var returned = values.make(function (value,index) {
    return items[index].value = value;
});

console.log(items[0].value,items[1].value,items[2].value);

//firebug shows: 4 5 6

所以看起来你的代码本身就是可行的.您可以在新页面上单独尝试此代码吗?这样,您可以验证原始页面上是否存在与您的代码交互并导致此错误内容.

原文地址:https://www.jb51.cc/js/429433.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐