javascript – 在第二个选择中选择角度而不更新modelValue的元素

前端之家收集整理的这篇文章主要介绍了javascript – 在第二个选择中选择角度而不更新modelValue的元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个角度视图中有一个绑定到模型的选择元素.当用键盘填写表格时,我注意到如果你向下箭头指向第二个选项的值,模型仍然代表第一个值.只有在使用键盘填写表单时才会发生这种情况.

设置非常简单,使用角度1.4.3:

  1. var app = angular.module('app',[]);
  2.  
  3. app.controller('myController',function() {
  4. var vm = this;
  5.  
  6. vm.options = [{
  7. Id: 1,Value: 'A'
  8. },{
  9. Id: 2,Value: 'B'
  10. },{
  11. Id: 3,Value: 'C'
  12. }]
  13. });
  1. <script src="https://code.angularjs.org/1.4.3/angular.js"></script>
  2.  
  3. <body ng-app="app">
  4. <div ng-controller="myController as ctrl">
  5. <p>
  6. Model is not updated on second down button push. Repro:
  7. <ol>
  8. <li>Tab to select element</li>
  9. <li>Hit down and notice the optionId updated to 1</li>
  10. <li>Hit down again and notice that the displayed value changes to B,but optionId stays as 1</li>
  11. <li>Hit down again and notice that the displayed value changes to C,and optionId changes to 3</li>
  12. <li>Hit up and notice that displayed value changes to B,and optionId changes to 2</li>
  13. </ol>
  14. Why doesn't the optionId = 2 on the initial selection of B
  15. </p>
  16. <select id="mySelect" ng-options="item.Id as item.Value for item in ctrl.options" ng-model="ctrl.optionId" style="width:200px">
  17. </select>
  18. <div><strong>optionId: {{ctrl.optionId}}</strong>
  19. </div>
  20. </div>
  21. </body>

为什么模型在第二个向下箭头按下时没有更新?

更新
这是一个展示行为的龙头,http://plnkr.co/edit/Hiu67NTR3Gpk9jByZtQD?p=info

第二次更新
这是一个实现Matt提议的解决方案的modified plunker.此解决方法会在Chrome,Firefox和Internet Explorer中产生所需的行为

解决方法

我相信你的问题克隆了一个预先存在的角度问题,它有一个可用的解决方案.

随意浏览the issue并跟踪对话和一些重复项.

针对Chrome / Safari / Firefox建议的解决方案如下所示:

  1. directive('changeOnKeyup',function changeOnKeyupDirective() {
  2. return function changeOnKeyupPostLink(scope,elem) {
  3. elem.on('keyup',elem.triggerHandler.bind(elem,'change'));
  4. };
  5. });

编辑:

由于这个原因,上述评论中的OP的issue因副本而被关闭.

猜你在找的JavaScript相关文章