Ich möchte eine Liste von Elementen erstellen, indem Sie auf einen Eintrag doppelklicken, um ihn editierbar zu machen. Momentan wird beim Bearbeiten eines Elements ein Klick nach außen (z. B. blur
) den neuen Wert übergeben. Aber ich möchte auch enter
auf der Tastatur in der Lage sein, die Änderung zu übermitteln.Verwenden Sie die Eingabetaste, um eine Eingabeänderung zu senden.
Jetzt sind ng-keyup, ng-keydown, ng-keypress Teil von AngularJS. Ich denke daran, sie zu benutzen. Hier ist mein aktueller Code. Es kann das Ereignis enter
und das item
, das wir gerade bearbeiten, abfangen, aber ich weiß nicht, wie ich den Rest erledigen soll.
Konnte jemand helfen?
var app = angular.module('app', []);
app.controller('Ctrl', ['$scope', function ($scope) {
$scope.items = [{ name: "item #1" }, { name: "item #2" }, { name: "item #3" }];
$scope.eEditable = -1;
$scope.up = function ($event, item) {
if ($event.keyCode === 13) {
console.log(item.name);
// what to do?
}
}
}])
input {
font-size: 20px;
border:none;
background-color:transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<body ng-app="app" ng-controller="Ctrl">
<table>
<tr ng-repeat="item in items">
<td>
<input type="text" value="{{item.name}}" ng-blur='eEditable = -1' ng-readonly='$index !== eEditable' ng-dblclick="eEditable = $index" ng-keyup="up($event, item)"/>
</td>
</tr>
</table>
</body>
PS: JSBin
Warum nicht einfach anrufen 'item.blur()'? – bluehipy
@bluehipy, weil 'item' keine solche Methode hat. '$ event.target.blur()'. – dfsq
@dfsq tatsächlich, '$ event.target.blur()' funktioniert ... Möchten Sie eine Antwort posten? – SoftTimur