Javascript 无法读取';选择开始';来自'的属性;HTMLInputElement';:

Javascript 无法读取';选择开始';来自'的属性;HTMLInputElement';:,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我正在使用绑定处理程序。如果我删除此代码,我的代码将被保存。但是如果我使用 这段代码将抛出错误 未捕获InvalidStateError:未能从“HTMLInputElement”读取“selectionStart”属性:输入元素的类型(“复选框”)不支持选择。 ko.bindingHandlers.wysiwyg = { init: function (element, valueAccessor, allBindingsAccessor) { deb

我正在使用绑定处理程序。如果我删除此代码,我的代码将被保存。但是如果我使用 这段代码将抛出错误

未捕获InvalidStateError:未能从“HTMLInputElement”读取“selectionStart”属性:输入元素的类型(“复选框”)不支持选择。

 ko.bindingHandlers.wysiwyg = {
        init: function (element, valueAccessor, allBindingsAccessor) {
            debugger;
            var options = allBindingsAccessor().wysiwygOptions || {};
            var value = ko.utils.unwrapObservable(valueAccessor());

                    //value = value.text();
            //var v = value[0].childNodes[0].data;
            var $e = $(element);

            $.extend(true, {
                initialContent: value
            }, options);

            $e.wysiwyg(options);

            //handle the field changing
            function detectFn() {
                var observable = valueAccessor();
                var newvalue = $e.wysiwyg("getContent");
                observable(newvalue);
            }

            var current = $e.wysiwyg('document');
            var timer;
            current.bind({
                keyup: function () {
                    clearTimeout(timer);
                    timer = setTimeout(detectFn, 1000);
                }
            });

            //handle disposal (if KO removes by the template binding)
            ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
                $e.wysiwyg('destroy');
            });


        },
        update: function (element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor());

            $(element).wysiwyg("setContent", value);
            ko.bindingHandlers.value.update(element, valueAccessor);
        }
    };

有些DOM元素的值无法通过使用jQuery的
.val()
或DOM的
.value
获得。一个例子是HTML5
number
字段;另一个是复选框

我不确定这个异常发生在哪里——您可以通过注释绑定处理程序中的行并使用试错法轻松找到。我可以将您的绑定处理程序复制到测试页面中,但我不知道您要将其绑定到什么HTML。但是,我怀疑您会发现必须执行一些元素类型检查,并为不同类型的DOM元素实现不同的逻辑

我的建议是将
init
函数更改为

init: function(element, valueAccessor, allBindingsAccessor) {
    var options = allBindingsAccessor().wysiwygOptions || {},
        value = ko.utils.unwrapObservable(valueAccessor());

    /*
        the rest of your init function, commented-out
    */
}

验证这不会引发异常,然后逐块逐渐取消对剩余脚本的注释,在每次修改后重新加载页面,直到找到异常的原因。

您的HTML中有
输入
元素
type=“checkbox”
,Javascript代码需要
type=“text”

复选框
没有文本,因此无法进行任何选择。但是您的代码试图访问不存在的属性
selectionStart

请查看以查看演示的问题

由于您没有发布HTML,因此很难看到是什么导致了错误

但是在浏览器开发工具中,您应该能够单击“Uncaught InvalidStateError”消息旁边的行号,以便查看试图访问复选框上的
selectionStart
属性的Javascript行

$.ajax({
        processData: false,
        contentType: false,
        type:"POST",

添加
processData=false
contentType=false
。这对我来说很有用。

thanx用于回复…是否有任何方法可以绕过此错误…或者有任何方法可以找到错误…在页面中,我有超过20个敲除组件…我很难找到问题…如果您找到任何方法来解决此问题,我将不胜感激。…类似于
复选框的东西。selectionStart
确实用于抛出错误,在Firefox中也是如此。但目前,在Firefox 62.0a1中,我只得到了
null
。这种行为会随着时间的推移而改变吗?有人能证实这一点吗?