1つの項目をダブルクリックすると編集可能になります。現在、アイテムを編集しているときに、外部(つまりblur
)をクリックするか、キーボードで入力すると新しい値が送信されます。入力値がパターンを満たしている場合にのみ入力値を送信することが許可されています
新しい変更は、空でないか、パターン(たとえば、ファイル名が.
の場合)でない場合にのみ送信できます。
私はng-required="true"
を試しましたが、動作しませんでした。
誰もこの制限を設定する方法を知っていますか?
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<style>
input {
font-size: 20px;
border:none;
background-color:transparent;
}
</style>
</head>
<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-keypress="keypress($event)" ng-required="true"/>
</td>
</tr>
</table>
<script>
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.keypress = function ($event) {
if ($event.keyCode === 13)
$event.target.blur()
}
}])
</script>
</body>
</html>
編集1:既存の答えがform
を使用することをお勧めしますが、私はform
またはsubmit
ボタンを使用する必要はありません。
myBlur
関数の新しい値を検証する方法があります。パターンが満たされない場合、入力フィールドにフォーカスを戻して、ユーザーが再度値を変更できるようにすることができます。別のJSBinがあります。
誰でも知っている方法は、入力フィールドにフォーカスを戻しますか?私はこのサイト役に立つ作る正規表現を見つけ
<input type="text" ng-model="model" id="input" name="input" ng-pattern="regex" />
正規表現と
確かに、 'ngKeypress'ではこれを行うことができました...しかしマウスbluring中にこれをどうやって行うことができますか? – SoftTimur
ぼかしの場合は、$ eventのイベントも表示するNgBlurイベントを使用できます。https://docs.angularjs.org/api/ng/directive/ngBlur –
@SoftTimurぼかしに関する私のコメントを参照してください。 –