ich die Grundform der folgenden jsfiddle http://jsfiddle.net/rniemeyer/8D5aj/Knockout JS Inline-Editing nicht fangen Key im Internet Explorer Geben Sie
ko.bindingHandlers.hidden = {
update: function(element, valueAccessor) {
ko.bindingHandlers.visible.update(element, function() { return !ko.utils.unwrapObservable(valueAccessor()); });
}
};
ko.bindingHandlers.clickToEdit = {
init: function(element, valueAccessor) {
var observable = valueAccessor(),
link = document.createElement("a"),
input = document.createElement("input");
element.appendChild(link);
element.appendChild(input);
observable.editing = ko.observable(false);
ko.applyBindingsToNode(link, {
text: observable,
hidden: observable.editing,
click: observable.editing.bind(null, true)
});
ko.applyBindingsToNode(input, {
value: observable,
visible: observable.editing,
hasfocus: observable.editing,
event: {
keyup: function(data, event) {
//if user hits enter, set editing to false, which makes field lose focus
if (event.keyCode === 13) {
observable.editing(false);
return false;
}
//if user hits escape, push the current observable value back to the field, then set editing to false
else if (event.keyCode === 27) {
observable.valueHasMutated();
observable.editing(false);
return false;
}
}
}
});
}
};
von this question bin mit einem klickbaren Spanne zu erstellen, die Sie dann den Wert bearbeiten können, wenn Sie klicken darauf. Wenn Sie Enter drücken, sollte das Observable mit Ihrem neuen Wert aktualisiert werden.
Es funktioniert gut in Chrom, aber in Internet Explorer (10 9 oder 8), wenn Sie die Eingabetaste drücken, wird der Wert auf den Wert zurückgesetzt, bevor Sie es bearbeitet haben und ich kann nicht herausfinden, warum. Gibt es eine inhärente Art und Weise, in der der IE die Eingabetaste in einem Eingabefeld anwendet, was dazu führt, dass dies nicht funktioniert, und gibt es einen Workaround?
offenbar IE löst nicht das Änderungsereignis auf dem Eingabefeld, wenn Sie die Eingabetaste drücken, auch wenn es bearbeitet wurde. Wenn ich es manuell im keyup-Event-Handler auslöst, verhält es sich wie erwartet im IE. – noah