首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取输入绑定的未捕获错误"NO_MODIFICATION_ALLOWED_ERR“

获取输入绑定的未捕获错误"NO_MODIFICATION_ALLOWED_ERR“
EN

Stack Overflow用户
提问于 2011-07-13 21:31:39
回答 3查看 6.4K关注 0票数 56

我从这个开始:

代码语言:javascript
复制
<script src="/Scripts/jquery-1.6.2.min.js" ...
<script src="/Scripts/knockout-1.2.1.debug.js" ...
<script src="/Scripts/knockout.mapping-latest.js" ...
<script src="/Scripts/jquery.unobtrusive-knockout.min.js" ...

然后,我从服务器中拉出一个平面JSON对象,并将找到的每个属性绑定到DOM中的匹配元素:

代码语言:javascript
复制
$.ajax({
    url: '/GetRecord',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(requestObject),
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        // Clear the current view model
        VM.Items.length = 0;

        // only one item coming from server
        VM.Items[0] = ko.mapping.fromJS(data.BlankItem);

        // for each property found, bind it to the matching DOM element
        $.each(VM.Items[0], function (indexInArray, valueOfElement) {
            var attrName = indexInArray;

            // skip over things not an accessor (get/set property function)
            if( typeof valueOfElement == "function")
            {
                var attrValue = valueOfElement();

                // if it's a checkbox, bind the checked attribute
                var a = $('input[name="' + attrName + '"][type="checkbox"]');
                if (a.length)
                    a.dataBind({ checked: attrName });

                // if it's a radio, bind all the found radio checked attributes
                var b = $('input[name^="' + attrName + '"][type="radio"]');
                if (b.length)
                    b.dataBind({ checked: attrName });

                // if it's a text, bind the text attribute
                var c = $('input[name="' + attrName + '"][type="text"]');
                if (c.length)
                    c.dataBind({ text: attrName });  // <--- Error (use value)
            }
        });

        // Then set knockout loose
        ko.applyBindings( VM.Items[0] );
    }
});

它会导致一个错误:

未捕获错误: NO_MODIFICATION_ALLOWED_ERR: DOM异常7

ko.bindingHandlers.updateknockout-1.2.1.debug.js:1577

invokeBindingHandlerknockout-1.2.1.debug.js:1231

ko.applyBindingsToNode.ko.dependentObservable.

disposeWhenNodeIsRemovedknockout-1.2.1.debug.js:1268

evaluateknockout 1.2.1.debug.js:927

ko.dependentObservableknockout-1.2.1.debug.js:965

ko.applyBindingsToNodeknockout-1.2.1.debug.js:1252

ko.applyBindingsknockout-1.2.1.debug.js:1284

ko.utils.arrayForEachknockout-1.2.1.debug.js:48

ko.applyBindingsknockout-1.2.1.debug.js:1283

$.ajax.successPropertyForm:266

f.extend._Deferred.e.resolveWithjquery-1.6.2.min.js:16

wjquery-1.6.2.min.js:18

f.support.ajax.f.ajaxTransport.send.d

我没有看到它绑定任何不应该绑定的项,而且在html中也没有声明性的knockout绑定。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-14 12:44:00

天哪。答案是使用正确的绑定属性。输入是value,而不是text

票数 119
EN

Stack Overflow用户

发布于 2012-10-02 09:33:04

在我的例子中,问题是我数据绑定到文本而不是值。

不好:

好:

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 03:40:55

当我不小心多次调用ko.applyBindings(viewModel)时,我也在Chrome中看到了这个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6679723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档