无法从'HTMLInputElement'中读取'selectionStart'属性:

diy*_*diy 5 javascript jquery knockout.js

我正在使用绑定handler.if我删除此代码我的代码被保存.但如果我使用此代码它将抛出错误.

Uncaught InvalidStateError:无法从'HTMLInputElement'读取'selectionStart'属性:input元素的类型('checkbox')不支持选择.

 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);
        }
    };
Run Code Online (Sandbox Code Playgroud)

awj*_*awj 1

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

我不确定这个异常发生在哪里- 您可以通过在绑定处理程序中注释掉行并使用试错法轻松找到答案。我可以将您的绑定处理程序复制到测试页中,但我不知道您将其绑定到什么 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
    */
}
Run Code Online (Sandbox Code Playgroud)

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