Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  <script src="http://canjs.com/release/2.0.5/can.jquery.js"></script>
  <script src="http://canjs.com/release/2.0.5/can.map.validations.js"></script>
<meta name="description" content="CanJS form validation" />
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <div class="app">
    
  </div>
  
  <script type="text/mustache" id="view">
   
   <form>
        <label for="first_name">First Name:</label>
        <input type="text" can-value='person.firstName' name="first_name" />
        {{showErrors errors 'firstName'}}
        <br>        
    
        <label for="last_name">Last Name:</label>
        <input type="text" can-value='person.lastName' name="last_name" />
        {{showErrors errors 'lastName'}}
        <br>    
        
       <input type="submit" value="Save" />
   </form>
  </script>
  
</body>
</html>
 
Mustache.registerHelper('showErrors', function (errors, prop) {
  var attr = errors.attr(prop);
  if (attr) {
    return prop + ' ' + attr[0];
  } else {
    return '';  
  }
});
var Person = can.Map({
  init: function () {
    this.validatePresenceOf('firstName');           this.validatePresenceOf('lastName');
  }
}, {});
var Control = can.Control({
  
  init: function (ele, options) {
    this.person = new Person();
    this.errors = new can.Map();
    var args = {person: this.person, errors: this.errors};
    var view = can.view('view', args);
    this.element.html(view);
  },
  
  'form submit': function () {
    var errors = this.person.errors();
    this.errors.attr(errors, true);  
    
    if (errors) {
        console.log(errors);
    } else {
     console.log('saving'); 
      // proceed to saving here
    }
    return false;
  }
 
});
var control = new Control('.app');
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
sportopro
0viewers