Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 无法检测自定义绑定中的事件_Knockout.js_Ko Custom Binding - Fatal编程技术网

Knockout.js 无法检测自定义绑定中的事件

Knockout.js 无法检测自定义绑定中的事件,knockout.js,ko-custom-binding,Knockout.js,Ko Custom Binding,正在尝试创建自定义绑定,它将检测两个输入框中的一个框中的值何时更改,以及它们何时更改。我想启用“保存”按钮。最初,“保存”按钮被禁用。 我似乎无法让它检测到事件,我试图在两个输入框上使用isDirty标志,因此如果其中一个检测到更改,我将显示“保存”按钮。使用事件绑定来检测用户何时进行更改是否更好?我想定制装订会更好。isDirty标志用于显示我的错误消息 HTML: <span>Global Percentage:</span> <input id="space

正在尝试创建自定义绑定,它将检测两个输入框中的一个框中的值何时更改,以及它们何时更改。我想启用“保存”按钮。最初,“保存”按钮被禁用。 我似乎无法让它检测到事件,我试图在两个输入框上使用isDirty标志,因此如果其中一个检测到更改,我将显示“保存”按钮。使用事件绑定来检测用户何时进行更改是否更好?我想定制装订会更好。isDirty标志用于显示我的错误消息

HTML:
<span>Global Percentage:</span> 
<input id="spaceGlobalPercentage" type="text" data-bind="value: globalPercent, valueUpdate: 'afterkeydown'" class="topInput" />

<span>Adjustment Factor:</span>
<input type="text" data-bind="value: adjustmentFactor, valueUpdate: 'afterkeydown'"class="topInput" />

<input type = "button" class="submitPercentCancelButton" id="submitPercentButton" value="Save" data-bind="click: save, enable: enableButton, buttonVisible: enableButton">
//检查是否有变化

    ko.subscribable.fn.trackDirtyFlag = function() {
        var original = this();

        this.isDirty = ko.computed(function() {
            return this() !== original;
        }, this);

        return this;
    };
//视图模型

    my.vm = {
         globalPercent: ko.observable("").extend({ required: "Enter a Global Percent, between 1 and 100." }).trackDirtyFlag(),
        adjustmentFactor: ko.observable("").extend({ required: "Enter an Adjustment Factor, between 1 and 100." }).trackDirtyFlag(),
        enableButton: ko.observable(false),
。。。。。 };

//应用绑定

ko.applyBindings(my.vm);

感谢您的建议或帮助

在这种情况下,自定义绑定可能太多了。我会使用一个
ko。根据每个字段的
isDirty
状态计算得出:

var vm = {
    globalPercent: ko.observable("").extend({
        required: "Enter a Global Percent, between 1 and 100."
    }).trackDirtyFlag(),
    adjustmentFactor: ko.observable("").extend({
        required: "Enter an Adjustment Factor, between 1 and 100."
    }).trackDirtyFlag(),
    save: function () {
        alert('saved');
    }
};

vm.enableButton = ko.computed(function () {
    return this.globalPercent.isDirty() || this.adjustmentFactor.isDirty();
}, vm);

示例:

你能把它放在JSFIDLE中吗?@LRP:没问题!很乐意帮忙。
var vm = {
    globalPercent: ko.observable("").extend({
        required: "Enter a Global Percent, between 1 and 100."
    }).trackDirtyFlag(),
    adjustmentFactor: ko.observable("").extend({
        required: "Enter an Adjustment Factor, between 1 and 100."
    }).trackDirtyFlag(),
    save: function () {
        alert('saved');
    }
};

vm.enableButton = ko.computed(function () {
    return this.globalPercent.isDirty() || this.adjustmentFactor.isDirty();
}, vm);