Używam podstawową formę następującej jsfiddle http://jsfiddle.net/rniemeyer/8D5aj/Knockout JS edycji inline nie złapać Enter w Internet Explorer
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;
}
}
}
});
}
};
od this question stworzyć klikalny przęsło, które można następnie edytować, gdy wartość to klikniesz. Po naciśnięciu enter powinno zaktualizować obserwowalne z nową wartością.
Działa dobrze w chrome, ale w przeglądarce Internet Explorer (10 9 lub 8) po naciśnięciu enter, wartość powraca do wartości, która była przed rozpoczęciem edycji i nie mogę zrozumieć dlaczego. Czy istnieje jakiś nieodłączny sposób, w jaki IE obsługuje klucz Enter w polu wejściowym, które sprawia, że to nie działa i czy istnieje obejście?
najwyraźniej IE nie wyzwalać zdarzenia zmiany w polu tekstowym po trafieniu wejść nawet jeśli został on stworzony. jeśli ręcznie wyzwolę go w procedurze obsługi zdarzeń keyup, zachowuje się tak, jak oczekuję w IE. – noah