<html>
<head>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"
rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-messages.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<meta charset="utf-8">
<title>Validation Form Check Sample</title>
</head>
<body ng-app="vfc" ng-controller="MainCtrl">
<div ng-messages="myForm.password.$error" ng-if="myForm.password.$dirty">
<p ng-message="minlength" class="text-danger">"パスワードは8文字以上16字以下としてください。"</p>
<p ng-message="maxlength" class="text-danger">"パスワードは8文字以上16字以下としてください。"</p>
</div>
<div ng-messages="myForm.passwordConfirm.$error" ng-if="myForm.password.$dirty">
<p ng-message="confirm" class="text-danger">"パスワードが一致しておりません。"</p>
</div>
<form name="myForm">
<div class="form-group">
<label for="exampleInputPassword">パスワード:8字以上16字以下</label>
<input
name="password"
ng-model="password"
type="password"
class="form-control"
id="exampleInputPassword"
placeholder="パスワード"
ng-maxlength="16"
ng-minlength="8" />
</div>
<div class="form-group">
<label for="exampleInputPasswordConfirm">パスワード確認</label>
<input
name="passwordConfirm"
ng-model="passwordConfirm"
type="password"
class="form-control"
id="exampleInputPasswordConfirm"
app-validators="validators.checkPasswordConfirm"
placeholder="パスワード確認" />
</div>
</form>
<pre>$scope.password: {{password}}</pre>
<pre>$scope.myForm.password.$viewValue: {{myForm.password.$viewValue}}</pre>
<pre>$scope.passwordConfirm: {{passwordConfirm}}</pre>
<pre ng-class="{'text-danger':password !== passwordConfirm}">$scope.password === $scope.passwordConfirm: {{password === passwordConfirm}}</pre>
<pre ng-class="{'text-danger':myForm.password.$viewValue !== passwordConfirm}">$scope.myForm.password.$viewValue === passwordConfirm: {{myForm.password.$viewValue === passwordConfirm}}</pre>
</body>
</html>
(function(){
'use strict';
var app = angular.module('vfc',['ngMessages']);
app.controller('MainCtrl',function($scope){
var checkPassword = function(modelValue,viewValue){
var confirmedPasswordVal = modelValue || viewValue;
var passwordVal = $scope.password || $scope.myForm.password.$viewValue;
return angular.equals(confirmedPasswordVal,passwordVal);
};
$scope.$watch('myform.password.$viewValue',function(newValue,oldValue){
if(angular.isObject($scope.myform)){
$scope.myform.passwordConfirm.$validate();
}
});
$scope.validators = {
'checkPasswordConfirm':{
'confirm' : checkPassword
}
};
});
app.directive('appValidators', function () {
return {
require: 'ngModel',
scope: {
appValidators: '=',
},
link: function (scope, elem, attrs, ctrl) {
var validators = scope.appValidators || {};
angular.forEach(validators, function (val, key) {
ctrl.$validators[key] = val;
});
}
};
});
}());
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |