Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width">
  6. <title>JS Bin</title>
  7. </head>
  8. <body>
  9. <ul>
  10. <li>
  11. <label for="name">姓名</label>
  12. <input id="name" name="name" type="text"/></li>
  13. <li>
  14. <label for="age">年龄</label>
  15. <select id="age" name="age">
  16. <option>80后</option>
  17. <option>90后</option>
  18. <option>00后</option>
  19. <option>其他</option>
  20. </select>
  21. </li>
  22. </ul>
  23.  
  24. <button id="confirm" type="submit">提交</button>
  25. <script id="jsbin-javascript">
  26. //getter/setter 与数据双向绑定
  27.  
  28. const view = {
  29. nameEl: document.getElementById('name'),
  30. ageEl: document.getElementById('age'),
  31. submitBtn: document.getElementById('confirm')
  32. }
  33.  
  34. view.submitBtn.addEventListener('click', function(evt){
  35. console.log('你要提交的数据是:' + [user.name, user.age]);
  36. evt.preventDefault();
  37. });
  38.  
  39. function User(name, age){
  40. this.name = name;
  41. this.age = age;
  42. }
  43.  
  44. User.prototype.bind = function(view){
  45. view.nameEl.addEventListener('change', evt => {
  46. this.name = evt.target.value;
  47. });
  48. view.ageEl.addEventListener('change', evt => {
  49. this.age = evt.target.value;
  50. });
  51. }
  52.  
  53. Object.defineProperty(User.prototype, 'name', {
  54. set: function(name){
  55. view.nameEl.value = name;
  56. },
  57. get: function(){
  58. return view.nameEl.value;
  59. }
  60. });
  61.  
  62. Object.defineProperty(User.prototype, 'age', {
  63. set: function(name){
  64. var ageOptions = Array.from(view.ageEl.options)
  65. .map(item => item.innerHTML);
  66. if(ageOptions.indexOf(name) === '-1'){
  67. throw new Error('无效的年龄格式');
  68. }
  69. view.ageEl.value = name;
  70. },
  71. get: function(){
  72. return view.ageEl.value;
  73. }
  74. });
  75.  
  76. var user = new User('akira', '80后');
  77. user.bind(view);
  78. </script>
  79.  
  80.  
  81.  
  82. <script id="jsbin-source-javascript" type="text/javascript">//getter/setter 与数据双向绑定
  83.  
  84. const view = {
  85. nameEl: document.getElementById('name'),
  86. ageEl: document.getElementById('age'),
  87. submitBtn: document.getElementById('confirm')
  88. }
  89.  
  90. view.submitBtn.addEventListener('click', function(evt){
  91. console.log('你要提交的数据是:' + [user.name, user.age]);
  92. evt.preventDefault();
  93. });
  94.  
  95. function User(name, age){
  96. this.name = name;
  97. this.age = age;
  98. }
  99.  
  100. User.prototype.bind = function(view){
  101. view.nameEl.addEventListener('change', evt => {
  102. this.name = evt.target.value;
  103. });
  104. view.ageEl.addEventListener('change', evt => {
  105. this.age = evt.target.value;
  106. });
  107. }
  108.  
  109. Object.defineProperty(User.prototype, 'name', {
  110. set: function(name){
  111. view.nameEl.value = name;
  112. },
  113. get: function(){
  114. return view.nameEl.value;
  115. }
  116. });
  117.  
  118. Object.defineProperty(User.prototype, 'age', {
  119. set: function(name){
  120. var ageOptions = Array.from(view.ageEl.options)
  121. .map(item => item.innerHTML);
  122. if(ageOptions.indexOf(name) === '-1'){
  123. throw new Error('无效的年龄格式');
  124. }
  125. view.ageEl.value = name;
  126. },
  127. get: function(){
  128. return view.ageEl.value;
  129. }
  130. });
  131.  
  132. var user = new User('akira', '80后');
  133. user.bind(view);
  134.  
  135. </script></body>
  136. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement