我有一个问题,我使用 KO if 标记在请求时将对话框代码带入 DOM。对话框上有一个带有提交按钮的表单。我希望阻止提交按钮使用 e.preventDefault(); 问题在于文档加载时,因为对话框不在 DOM 中,所以这个覆盖功能不起作用。
我在这里创建了一个 JSFiddle 来演示这个问题:
model = new function () {};
model.functions = ko.observable();
model.data = ko.observable();
model.data.status = ko.observable("Status: model is live");
model.data.visible = ko.observable(false);
model.functions.showDialog = function (dialogVisible) {
if (dialogVisible == true) {
model.data.status("Status: Darth Dialog Activated");
model.data.visible(true);
$("#darthDialog").dialog({
modal: true
});
} else {
model.data.status("Status: Darth Dialog Deactivated");
$("#darthDialog").dialog('close');
model.data.visible(false);
}
};
ko.applyBindings(model);
$(function preventSubmit(e) {
$("#submissionForm").submit(function (e) {
e.preventDefault();
model.status("Status: Saved by Ko.da");
return false;
});
});
作为旁注,在我的小提琴中,取消按钮只能与 ko if 语句一起使用。我不确定这是为什么。在我的实时站点中,这没有发生。如果您从 HTML 中删除 ,则提交被阻止,并且取消按钮继续工作。
有没有什么办法可以使它起作用,同时保持 KO if's?