Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/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
Jquery ui knockoutjs提交绑定未正确处理enter键_Jquery Ui_Submit_Knockout.js - Fatal编程技术网

Jquery ui knockoutjs提交绑定未正确处理enter键

Jquery ui knockoutjs提交绑定未正确处理enter键,jquery-ui,submit,knockout.js,Jquery Ui,Submit,Knockout.js,我有一个jQueryUI对话框,表单上有一个knockoutjs提交绑定。可以通过按“取消”按钮、按对话框标题栏上的“关闭”按钮、按“退出”或按“保存”按钮来关闭对话框。我的意图是,取消、转义和标题栏关闭事件应在不应用任何操作的情况下关闭对话框,而按enter键或单击“保存”应执行对话框操作。除enter键外,所有操作均按预期进行,该键将导致取消事件,而不是提交事件 我创建了一个示例来说明这一点,并包含下面的代码供参考 我为冗长的代码道歉 基因 如果按钮没有类型,则浏览器会假定它可以被视为sub

我有一个jQueryUI对话框,表单上有一个knockoutjs提交绑定。可以通过按“取消”按钮、按对话框标题栏上的“关闭”按钮、按“退出”或按“保存”按钮来关闭对话框。我的意图是,取消、转义和标题栏关闭事件应在不应用任何操作的情况下关闭对话框,而按enter键或单击“保存”应执行对话框操作。除enter键外,所有操作均按预期进行,该键将导致取消事件,而不是提交事件

我创建了一个示例来说明这一点,并包含下面的代码供参考

我为冗长的代码道歉

基因


如果按钮没有类型,则浏览器会假定它可以被视为
submit
按钮。因此,当您点击
enter
时,取消按钮的方法正在执行,并阻止了默认提交的实际发生。因此,如果在“取消”按钮之前移动“保存”按钮,它将正常工作

但是,真正的解决方法只是将
type=“button”
添加到取消:

<button type="button" style="float: left;" data-bind="click: cancel">Cancel</button>
取消

是的,我花了很长时间看了这张。似乎我们遗漏了一些小东西,不需要一大堆代码来捕获keycode13,等等。。。
ko.bindingHandlers.dialog = {
    init: function(element, valueAccessor, allBindingsAccessor) {
        var options = ko.utils.unwrapObservable(valueAccessor());
        setTimeout(function() { $(element).dialog(options || {}); }, 0);

        //handle disposal (not strictly necessary in this scenario)
         ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
             $(element).dialog("destroy");
         });   
    },
    update: function(element, valueAccessor, allBindingsAccessor) {
         var shouldBeOpen = ko.utils.unwrapObservable(allBindingsAccessor().openWhen);
         $(element)
             .dialog(shouldBeOpen ? "open" : "close");
    }
};

function Task(name) {
    var self = this;
    this.title = ko.observable(name);

    this.toString = function() { return "Task: " + self.title(); };
}

function TaskDialog(viewModel) {
    var self = this;

    this.viewModel = viewModel;
    this.task = ko.observable();
    this.open = ko.observable(false);
    this.titletext = ko.observable();

    this.editTask = function(task) {
        self.task(task);
        self.titletext(task.title());
        self.open(true);
    }

    this.update = function() {
        var task = self.task();
        task.title(self.titletext());
        self.open(false);
    }

    this.updateCloseState = function() {
        if (self.open())
            self.open(false);
    }

    this.cancel = function() {
        self.open(false);
    }
}


function viewModel() {
    var self = this;
    this.dialog = ko.observable(new TaskDialog(self));
    this.task = ko.observable(new Task('sample task'));

    this.editTask = function() {
        self.dialog().editTask(self.task());
    }
};

ko.applyBindings(new viewModel());
<button type="button" style="float: left;" data-bind="click: cancel">Cancel</button>